<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=11"/>
<meta name="generator" content="Doxygen 1.9.4"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>Flow-IPC: ipc::session::shm::classic::Session_server&lt; S_MQ_TYPE_OR_NONE, S_TRANSMIT_NATIVE_HANDLES, Mdt_payload &gt; Class Template Reference</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
<link href="search/search.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="search/searchdata.js"></script>
<script type="text/javascript" src="search/search.js"></script>
<link href="doxygen.css" rel="stylesheet" type="text/css" />
</head>
<body>
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
<div id="titlearea">
<table cellspacing="0" cellpadding="0">
 <tbody>
 <tr id="projectrow">
  <td id="projectalign">
   <div id="projectname">Flow-IPC<span id="projectnumber">&#160;2.0.0</span>
   </div>
   <div id="projectbrief">Flow-IPC project: Full implementation reference.</div>
  </td>
 </tr>
 </tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.9.4 -->
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
var searchBox = new SearchBox("searchBox", "search",'Search','.html');
/* @license-end */
</script>
<script type="text/javascript" src="menudata.js"></script>
<script type="text/javascript" src="menu.js"></script>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
$(function() {
  initMenu('',true,false,'search.php','Search');
  $(document).ready(function() { init_search(); });
});
/* @license-end */
</script>
<div id="main-nav"></div>
<!-- window showing the filter options -->
<div id="MSearchSelectWindow"
     onmouseover="return searchBox.OnSearchSelectShow()"
     onmouseout="return searchBox.OnSearchSelectHide()"
     onkeydown="return searchBox.OnSearchSelectKey(event)">
</div>

<!-- iframe showing the search results (closed by default) -->
<div id="MSearchResultsWindow">
<iframe src="javascript:void(0)" frameborder="0" 
        name="MSearchResults" id="MSearchResults">
</iframe>
</div>

<div id="nav-path" class="navpath">
  <ul>
<li class="navelem"><a class="el" href="namespaceipc.html">ipc</a></li><li class="navelem"><a class="el" href="namespaceipc_1_1session.html">session</a></li><li class="navelem"><a class="el" href="namespaceipc_1_1session_1_1shm.html">shm</a></li><li class="navelem"><a class="el" href="namespaceipc_1_1session_1_1shm_1_1classic.html">classic</a></li><li class="navelem"><a class="el" href="classipc_1_1session_1_1shm_1_1classic_1_1Session__server.html">Session_server</a></li>  </ul>
</div>
</div><!-- top -->
<div class="header">
  <div class="summary">
<a href="#pub-types">Public Types</a> &#124;
<a href="#pub-methods">Public Member Functions</a> &#124;
<a href="#pri-types">Private Types</a> &#124;
<a href="#pri-methods">Private Member Functions</a> &#124;
<a href="#pri-attribs">Private Attributes</a> &#124;
<a href="#related">Related Functions</a> &#124;
<a href="classipc_1_1session_1_1shm_1_1classic_1_1Session__server-members.html">List of all members</a>  </div>
  <div class="headertitle"><div class="title">ipc::session::shm::classic::Session_server&lt; S_MQ_TYPE_OR_NONE, S_TRANSMIT_NATIVE_HANDLES, Mdt_payload &gt; Class Template Reference</div></div>
</div><!--header-->
<div class="contents">

<p>This is to vanilla <a class="el" href="classipc_1_1session_1_1shm_1_1classic_1_1Session__server.html" title="This is to vanilla Session_server what shm::classic::Server_session is to vanilla Server_session: it ...">Session_server</a> what <a class="el" href="classipc_1_1session_1_1shm_1_1classic_1_1Server__session.html" title="Identical to session::Server_session in every way, except that it makes available two SHM arenas,...">shm::classic::Server_session</a> is to vanilla <a class="el" href="namespaceipc_1_1session.html#ab01d5bce0ab2f3435ca9dd88d27609dc" title="A vanilla Server_session with no optional capabilities.">Server_session</a>: it is the session-server type that starts SHM-enabled sessions with SHM-classic provider (<a class="el" href="classipc_1_1shm_1_1classic_1_1Pool__arena.html" title="A SHM-classic interface around a single SHM pool with allocation-algorithm services by boost....">ipc::shm::classic::Pool_arena</a>).  
 <a href="classipc_1_1session_1_1shm_1_1classic_1_1Session__server.html#details">More...</a></p>

<p><code>#include &lt;<a class="el" href="ipc__shm_2src_2ipc_2session_2shm_2classic_2session__server_8hpp_source.html">session_server.hpp</a>&gt;</code></p>
<div class="dynheader">
Inheritance diagram for ipc::session::shm::classic::Session_server&lt; S_MQ_TYPE_OR_NONE, S_TRANSMIT_NATIVE_HANDLES, Mdt_payload &gt;:</div>
<div class="dyncontent">
<div class="center"><iframe scrolling="no" frameborder="0" src="classipc_1_1session_1_1shm_1_1classic_1_1Session__server__inherit__graph.svg" width="628" height="119"><p><b>This browser is not able to show SVG: try Firefox, Chrome, Safari, or Opera instead.</b></p></iframe>
</div>
<center><span class="legend">[<a href="graph_legend.html">legend</a>]</span></center></div>
<div class="dynheader">
Collaboration diagram for ipc::session::shm::classic::Session_server&lt; S_MQ_TYPE_OR_NONE, S_TRANSMIT_NATIVE_HANDLES, Mdt_payload &gt;:</div>
<div class="dyncontent">
<div class="center"><iframe scrolling="no" frameborder="0" src="classipc_1_1session_1_1shm_1_1classic_1_1Session__server__coll__graph.svg" width="1423" height="663"><p><b>This browser is not able to show SVG: try Firefox, Chrome, Safari, or Opera instead.</b></p></iframe>
</div>
<center><span class="legend">[<a href="graph_legend.html">legend</a>]</span></center></div>
<table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="pub-types" name="pub-types"></a>
Public Types</h2></td></tr>
<tr class="memitem:a2330c13a2c20303d4be4adfe4c74b2b9"><td class="memItemLeft" align="right" valign="top">using&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classipc_1_1session_1_1shm_1_1classic_1_1Session__server.html#a2330c13a2c20303d4be4adfe4c74b2b9">Server_session_obj</a> = <a class="el" href="classipc_1_1session_1_1shm_1_1classic_1_1Server__session.html">shm::classic::Server_session</a>&lt; S_MQ_TYPE_OR_NONE, S_TRANSMIT_NATIVE_HANDLES, Mdt_payload &gt;</td></tr>
<tr class="memdesc:a2330c13a2c20303d4be4adfe4c74b2b9"><td class="mdescLeft">&#160;</td><td class="mdescRight">Short-hand for the concrete <code><a class="el" href="classipc_1_1session_1_1shm_1_1classic_1_1Server__session.html" title="Identical to session::Server_session in every way, except that it makes available two SHM arenas,...">Server_session</a></code>-like type emitted by <a class="el" href="classipc_1_1session_1_1shm_1_1classic_1_1Session__server.html#ac6733bac776ecd2995f41cb0feb81d63" title="Contract identical to simpler session::Session_server::async_accept() overload; but internally ensure...">async_accept()</a>.  <a href="classipc_1_1session_1_1shm_1_1classic_1_1Session__server.html#a2330c13a2c20303d4be4adfe4c74b2b9">More...</a><br /></td></tr>
<tr class="separator:a2330c13a2c20303d4be4adfe4c74b2b9"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:aff4a736c67698d14a538276912e6101d"><td class="memItemLeft" align="right" valign="top">using&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classipc_1_1session_1_1shm_1_1classic_1_1Session__server.html#aff4a736c67698d14a538276912e6101d">Mdt_reader_ptr</a> = typename Impl::Mdt_reader_ptr</td></tr>
<tr class="memdesc:aff4a736c67698d14a538276912e6101d"><td class="mdescLeft">&#160;</td><td class="mdescRight">Short-hand for <a class="el" href="classipc_1_1session_1_1Session__mv.html#a2b1215fb0c9738b9fcfbb337d23c43df" title="Implements Session API per contract.">Session_mv::Mdt_reader_ptr</a>.  <a href="classipc_1_1session_1_1shm_1_1classic_1_1Session__server.html#aff4a736c67698d14a538276912e6101d">More...</a><br /></td></tr>
<tr class="separator:aff4a736c67698d14a538276912e6101d"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a81f60d9c8af965468c0887a2af4e2823"><td class="memItemLeft" align="right" valign="top">using&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classipc_1_1session_1_1shm_1_1classic_1_1Session__server.html#a81f60d9c8af965468c0887a2af4e2823">Mdt_builder</a> = typename Server_session_obj::Mdt_builder</td></tr>
<tr class="memdesc:a81f60d9c8af965468c0887a2af4e2823"><td class="mdescLeft">&#160;</td><td class="mdescRight">Metadata builder type passed to <code>mdt_load_func()</code> in advanced <a class="el" href="classipc_1_1session_1_1shm_1_1classic_1_1Session__server.html#ac6733bac776ecd2995f41cb0feb81d63" title="Contract identical to simpler session::Session_server::async_accept() overload; but internally ensure...">async_accept()</a> overload.  <a href="classipc_1_1session_1_1shm_1_1classic_1_1Session__server.html#a81f60d9c8af965468c0887a2af4e2823">More...</a><br /></td></tr>
<tr class="separator:a81f60d9c8af965468c0887a2af4e2823"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ab8f638542f33b5028e1db7ce7572fef3"><td class="memItemLeft" align="right" valign="top">using&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classipc_1_1session_1_1shm_1_1classic_1_1Session__server.html#ab8f638542f33b5028e1db7ce7572fef3">Channels</a> = typename Impl::Channels</td></tr>
<tr class="memdesc:ab8f638542f33b5028e1db7ce7572fef3"><td class="mdescLeft">&#160;</td><td class="mdescRight">Short-hand for <a class="el" href="classipc_1_1session_1_1Session__mv.html#af87da439644b2afd73d6a13d97e7985f" title="Container (vector&lt;&gt;) of Channel_obj.">Session_mv::Channels</a>.  <a href="classipc_1_1session_1_1shm_1_1classic_1_1Session__server.html#ab8f638542f33b5028e1db7ce7572fef3">More...</a><br /></td></tr>
<tr class="separator:ab8f638542f33b5028e1db7ce7572fef3"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ae4d637a7d4082c639b7ef7654cc616f3"><td class="memItemLeft" align="right" valign="top">using&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classipc_1_1session_1_1shm_1_1classic_1_1Session__server.html#ae4d637a7d4082c639b7ef7654cc616f3">Arena</a> = typename <a class="el" href="classipc_1_1session_1_1shm_1_1classic_1_1Session__mv.html#a07c9b1803567c2714ae48433e756047f">Server_session_obj::Base::Arena</a></td></tr>
<tr class="memdesc:ae4d637a7d4082c639b7ef7654cc616f3"><td class="mdescLeft">&#160;</td><td class="mdescRight">Short-hand for <a class="el" href="classipc_1_1session_1_1shm_1_1classic_1_1Session__mv.html#a07c9b1803567c2714ae48433e756047f" title="The arena object on which one may call construct&lt;T&gt;(ctor_args...), where ctor_args are arguments to t...">shm::classic::Session_mv::Arena</a>. See <a class="el" href="classipc_1_1session_1_1shm_1_1classic_1_1Session__server.html#ae3e011716068f4e669bd7eed487cf207" title="Returns pointer to the per-app SHM-arena, whose lifetime extends until *this is destroyed; or null if...">app_shm()</a> in particular.  <a href="classipc_1_1session_1_1shm_1_1classic_1_1Session__server.html#ae4d637a7d4082c639b7ef7654cc616f3">More...</a><br /></td></tr>
<tr class="separator:ae4d637a7d4082c639b7ef7654cc616f3"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a2f814f83d98f8841f9dc01c7d8594bb2"><td class="memItemLeft" align="right" valign="top">using&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classipc_1_1session_1_1shm_1_1classic_1_1Session__server.html#a2f814f83d98f8841f9dc01c7d8594bb2">Structured_msg_builder_config</a> = typename <a class="el" href="classipc_1_1session_1_1shm_1_1classic_1_1Session__mv.html#a23d60bbc945c72cd6f19fdadd7ce014d">Server_session_obj::Base::Structured_msg_builder_config</a></td></tr>
<tr class="memdesc:a2f814f83d98f8841f9dc01c7d8594bb2"><td class="mdescLeft">&#160;</td><td class="mdescRight">Short-hand for <a class="el" href="classipc_1_1session_1_1shm_1_1classic_1_1Session__mv.html#a23d60bbc945c72cd6f19fdadd7ce014d" title="Implements Session API per contract.">shm::classic::Session_mv::Structured_msg_builder_config</a>.  <a href="classipc_1_1session_1_1shm_1_1classic_1_1Session__server.html#a2f814f83d98f8841f9dc01c7d8594bb2">More...</a><br /></td></tr>
<tr class="separator:a2f814f83d98f8841f9dc01c7d8594bb2"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a9b709f4510613328942335b4ba5fb49d"><td class="memItemLeft" align="right" valign="top">using&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classipc_1_1session_1_1shm_1_1classic_1_1Session__server.html#a9b709f4510613328942335b4ba5fb49d">Structured_msg_reader_config</a> = typename <a class="el" href="classipc_1_1session_1_1shm_1_1classic_1_1Session__mv.html#a2b27e91465c5dbdefcb12a6913a9ad4c">Server_session_obj::Base::Structured_msg_reader_config</a></td></tr>
<tr class="memdesc:a9b709f4510613328942335b4ba5fb49d"><td class="mdescLeft">&#160;</td><td class="mdescRight">Short-hand for <a class="el" href="classipc_1_1session_1_1shm_1_1classic_1_1Session__mv.html#a2b27e91465c5dbdefcb12a6913a9ad4c" title="Implements Session API per contract.">shm::classic::Session_mv::Structured_msg_reader_config</a>.  <a href="classipc_1_1session_1_1shm_1_1classic_1_1Session__server.html#a9b709f4510613328942335b4ba5fb49d">More...</a><br /></td></tr>
<tr class="separator:a9b709f4510613328942335b4ba5fb49d"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table><table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="pub-methods" name="pub-methods"></a>
Public Member Functions</h2></td></tr>
<tr class="memitem:af10bb97219c59c34fce50be09eaacf0c"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classipc_1_1session_1_1shm_1_1classic_1_1Session__server.html#af10bb97219c59c34fce50be09eaacf0c">Session_server</a> (flow::log::Logger *logger_ptr, const <a class="el" href="structipc_1_1session_1_1Server__app.html">Server_app</a> &amp;srv_app_ref, const <a class="el" href="structipc_1_1session_1_1Client__app.html#add718cbf6aa1d2abb26fbadcc974a7bd">Client_app::Master_set</a> &amp;cli_app_master_set_ref, <a class="el" href="namespaceipc.html#aa3192e586cc45d3e7c22463bf2760f89">Error_code</a> *err_code=0)</td></tr>
<tr class="memdesc:af10bb97219c59c34fce50be09eaacf0c"><td class="mdescLeft">&#160;</td><td class="mdescRight">Constructor: identical to <a class="el" href="classipc_1_1session_1_1Session__server.html" title="To be instantiated typically once in a given process, an object of this type asynchronously listens f...">session::Session_server</a> ctor.  <a href="classipc_1_1session_1_1shm_1_1classic_1_1Session__server.html#af10bb97219c59c34fce50be09eaacf0c">More...</a><br /></td></tr>
<tr class="separator:af10bb97219c59c34fce50be09eaacf0c"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ac5246e4ce9df15b963ccde81715473c0"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classipc_1_1session_1_1shm_1_1classic_1_1Session__server.html#ac5246e4ce9df15b963ccde81715473c0">~Session_server</a> ()</td></tr>
<tr class="memdesc:ac5246e4ce9df15b963ccde81715473c0"><td class="mdescLeft">&#160;</td><td class="mdescRight">Destructor: contract is identical to <a class="el" href="classipc_1_1session_1_1Session__server.html" title="To be instantiated typically once in a given process, an object of this type asynchronously listens f...">session::Session_server</a> dtor.  <a href="classipc_1_1session_1_1shm_1_1classic_1_1Session__server.html#ac5246e4ce9df15b963ccde81715473c0">More...</a><br /></td></tr>
<tr class="separator:ac5246e4ce9df15b963ccde81715473c0"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:af6472e74db4dee7cf5ce5be55ded4179"><td class="memItemLeft" align="right" valign="top">size_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classipc_1_1session_1_1shm_1_1classic_1_1Session__server.html#af6472e74db4dee7cf5ce5be55ded4179">pool_size_limit_mi</a> () const</td></tr>
<tr class="memdesc:af6472e74db4dee7cf5ce5be55ded4179"><td class="mdescLeft">&#160;</td><td class="mdescRight">The pool-size value, in mebibytes, which will be used to size the pool in subsequent <code><a class="el" href="classipc_1_1session_1_1shm_1_1classic_1_1Session__server.html#ac6733bac776ecd2995f41cb0feb81d63" title="Contract identical to simpler session::Session_server::async_accept() overload; but internally ensure...">async_accept()</a></code>s.  <a href="classipc_1_1session_1_1shm_1_1classic_1_1Session__server.html#af6472e74db4dee7cf5ce5be55ded4179">More...</a><br /></td></tr>
<tr class="separator:af6472e74db4dee7cf5ce5be55ded4179"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a855afed179ab8f4b694d9152b94a4f2f"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classipc_1_1session_1_1shm_1_1classic_1_1Session__server.html#a855afed179ab8f4b694d9152b94a4f2f">pool_size_limit_mi</a> (size_t limit_mi)</td></tr>
<tr class="memdesc:a855afed179ab8f4b694d9152b94a4f2f"><td class="mdescLeft">&#160;</td><td class="mdescRight">Sets the value as returned by <code><a class="el" href="classipc_1_1session_1_1shm_1_1classic_1_1Session__server.html#af6472e74db4dee7cf5ce5be55ded4179" title="The pool-size value, in mebibytes, which will be used to size the pool in subsequent async_accept()s.">pool_size_limit_mi()</a></code> accessor.  <a href="classipc_1_1session_1_1shm_1_1classic_1_1Session__server.html#a855afed179ab8f4b694d9152b94a4f2f">More...</a><br /></td></tr>
<tr class="separator:a855afed179ab8f4b694d9152b94a4f2f"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ac6733bac776ecd2995f41cb0feb81d63"><td class="memTemplParams" colspan="2">template&lt;typename Task_err &gt; </td></tr>
<tr class="memitem:ac6733bac776ecd2995f41cb0feb81d63"><td class="memTemplItemLeft" align="right" valign="top">void&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="classipc_1_1session_1_1shm_1_1classic_1_1Session__server.html#ac6733bac776ecd2995f41cb0feb81d63">async_accept</a> (<a class="el" href="classipc_1_1session_1_1shm_1_1classic_1_1Session__server.html#a2330c13a2c20303d4be4adfe4c74b2b9">Server_session_obj</a> *target_session, Task_err &amp;&amp;on_done_func)</td></tr>
<tr class="memdesc:ac6733bac776ecd2995f41cb0feb81d63"><td class="mdescLeft">&#160;</td><td class="mdescRight">Contract identical to simpler <a class="el" href="classipc_1_1session_1_1Session__server.html#a13887cd64912bb5f5675e2817ff8435f" title="Asynchronously awaits for an opposing Client_session to request session establishment and calls on_do...">session::Session_server::async_accept()</a> overload; but internally ensures that the appropriate SHM-classic arenas are available for use in the emitted <a class="el" href="classipc_1_1session_1_1shm_1_1classic_1_1Session__server.html#a2330c13a2c20303d4be4adfe4c74b2b9" title="Short-hand for the concrete Server_session-like type emitted by async_accept().">Server_session_obj</a>.  <a href="classipc_1_1session_1_1shm_1_1classic_1_1Session__server.html#ac6733bac776ecd2995f41cb0feb81d63">More...</a><br /></td></tr>
<tr class="separator:ac6733bac776ecd2995f41cb0feb81d63"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ab77874720a5b252df5b1d6faf5d29bb5"><td class="memTemplParams" colspan="2">template&lt;typename Task_err , typename N_init_channels_by_srv_req_func , typename Mdt_load_func &gt; </td></tr>
<tr class="memitem:ab77874720a5b252df5b1d6faf5d29bb5"><td class="memTemplItemLeft" align="right" valign="top">void&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="classipc_1_1session_1_1shm_1_1classic_1_1Session__server.html#ab77874720a5b252df5b1d6faf5d29bb5">async_accept</a> (<a class="el" href="classipc_1_1session_1_1shm_1_1classic_1_1Session__server.html#a2330c13a2c20303d4be4adfe4c74b2b9">Server_session_obj</a> *target_session, <a class="el" href="classipc_1_1session_1_1shm_1_1classic_1_1Session__server.html#ab8f638542f33b5028e1db7ce7572fef3">Channels</a> *init_channels_by_srv_req, <a class="el" href="classipc_1_1session_1_1shm_1_1classic_1_1Session__server.html#aff4a736c67698d14a538276912e6101d">Mdt_reader_ptr</a> *mdt_from_cli_or_null, <a class="el" href="classipc_1_1session_1_1shm_1_1classic_1_1Session__server.html#ab8f638542f33b5028e1db7ce7572fef3">Channels</a> *init_channels_by_cli_req, N_init_channels_by_srv_req_func &amp;&amp;n_init_channels_by_srv_req_func, Mdt_load_func &amp;&amp;mdt_load_func, Task_err &amp;&amp;on_done_func)</td></tr>
<tr class="memdesc:ab77874720a5b252df5b1d6faf5d29bb5"><td class="mdescLeft">&#160;</td><td class="mdescRight">Contract identical to advanced <a class="el" href="classipc_1_1session_1_1Session__server.html#a13887cd64912bb5f5675e2817ff8435f" title="Asynchronously awaits for an opposing Client_session to request session establishment and calls on_do...">session::Session_server::async_accept()</a> overload; but internally ensures that the appropriate SHM-classic arenas are available for use in the emitted <a class="el" href="classipc_1_1session_1_1shm_1_1classic_1_1Session__server.html#a2330c13a2c20303d4be4adfe4c74b2b9" title="Short-hand for the concrete Server_session-like type emitted by async_accept().">Server_session_obj</a>.  <a href="classipc_1_1session_1_1shm_1_1classic_1_1Session__server.html#ab77874720a5b252df5b1d6faf5d29bb5">More...</a><br /></td></tr>
<tr class="separator:ab77874720a5b252df5b1d6faf5d29bb5"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ae3e011716068f4e669bd7eed487cf207"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classipc_1_1session_1_1shm_1_1classic_1_1Session__server.html#ae4d637a7d4082c639b7ef7654cc616f3">Arena</a> *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classipc_1_1session_1_1shm_1_1classic_1_1Session__server.html#ae3e011716068f4e669bd7eed487cf207">app_shm</a> (const <a class="el" href="structipc_1_1session_1_1Client__app.html">Client_app</a> &amp;app)</td></tr>
<tr class="memdesc:ae3e011716068f4e669bd7eed487cf207"><td class="mdescLeft">&#160;</td><td class="mdescRight">Returns pointer to the per-<code>app</code> SHM-arena, whose lifetime extends until <code>*this</code> is destroyed; or null if the given <a class="el" href="structipc_1_1session_1_1Client__app.html" title="An App that is used as a client in at least one client-server IPC split.">Client_app</a> has not yet opened at least 1 <a class="el" href="classipc_1_1session_1_1shm_1_1classic_1_1Server__session.html" title="Identical to session::Server_session in every way, except that it makes available two SHM arenas,...">shm::classic::Server_session</a> via <a class="el" href="classipc_1_1session_1_1shm_1_1classic_1_1Session__server.html#ac6733bac776ecd2995f41cb0feb81d63" title="Contract identical to simpler session::Session_server::async_accept() overload; but internally ensure...">async_accept()</a>.  <a href="classipc_1_1session_1_1shm_1_1classic_1_1Session__server.html#ae3e011716068f4e669bd7eed487cf207">More...</a><br /></td></tr>
<tr class="separator:ae3e011716068f4e669bd7eed487cf207"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ad0dafea47293d23e079b6b5c5c6a9cef"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classipc_1_1session_1_1shm_1_1classic_1_1Session__server.html#a2f814f83d98f8841f9dc01c7d8594bb2">Structured_msg_builder_config</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classipc_1_1session_1_1shm_1_1classic_1_1Session__server.html#ad0dafea47293d23e079b6b5c5c6a9cef">app_shm_builder_config</a> (const <a class="el" href="structipc_1_1session_1_1Client__app.html">Client_app</a> &amp;app)</td></tr>
<tr class="memdesc:ad0dafea47293d23e079b6b5c5c6a9cef"><td class="mdescLeft">&#160;</td><td class="mdescRight">Returns builder config suitable for capnp-serializing out-messages in SHM arena <a class="el" href="classipc_1_1session_1_1shm_1_1classic_1_1Session__server.html#ae3e011716068f4e669bd7eed487cf207" title="Returns pointer to the per-app SHM-arena, whose lifetime extends until *this is destroyed; or null if...">app_shm()</a> for the same <code><a class="el" href="structipc_1_1session_1_1Client__app.html" title="An App that is used as a client in at least one client-server IPC split.">Client_app</a> app</code>.  <a href="classipc_1_1session_1_1shm_1_1classic_1_1Session__server.html#ad0dafea47293d23e079b6b5c5c6a9cef">More...</a><br /></td></tr>
<tr class="separator:ad0dafea47293d23e079b6b5c5c6a9cef"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a4bfebd1e36c1b2924b6f84294f7cb10c"><td class="memItemLeft" align="right" valign="top">Structured_msg_builder_config::Builder::Session&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classipc_1_1session_1_1shm_1_1classic_1_1Session__server.html#a4bfebd1e36c1b2924b6f84294f7cb10c">app_shm_lender_session</a> (const <a class="el" href="structipc_1_1session_1_1Client__app.html">Client_app</a> &amp;app)</td></tr>
<tr class="memdesc:a4bfebd1e36c1b2924b6f84294f7cb10c"><td class="mdescLeft">&#160;</td><td class="mdescRight">In short, what <a class="el" href="classipc_1_1session_1_1shm_1_1classic_1_1Session__server.html#ad0dafea47293d23e079b6b5c5c6a9cef" title="Returns builder config suitable for capnp-serializing out-messages in SHM arena app_shm() for the sam...">app_shm_builder_config()</a> is to <a class="el" href="classipc_1_1session_1_1shm_1_1classic_1_1Session__mv.html#a0fbea0563835e852069cdaab506dd92c" title="Identical to session_shm_builder_config() but backed by SHM arena app_shm() instead of session_shm().">shm::classic::Session_mv::app_shm_builder_config()</a>, this is to <a class="el" href="classipc_1_1session_1_1shm_1_1classic_1_1Session__mv.html#a0b7540b33fcedeaba37a3fece1bdec7a" title="When transmitting items originating in Arena app_shm() via transport::struc::shm::Builder::emit_seria...">shm::classic::Session_mv::app_shm_lender_session()</a>.  <a href="classipc_1_1session_1_1shm_1_1classic_1_1Session__server.html#a4bfebd1e36c1b2924b6f84294f7cb10c">More...</a><br /></td></tr>
<tr class="separator:a4bfebd1e36c1b2924b6f84294f7cb10c"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ac87840d13847fca013ef3f64de8dbcce"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classipc_1_1session_1_1shm_1_1classic_1_1Session__server.html#a9b709f4510613328942335b4ba5fb49d">Structured_msg_reader_config</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classipc_1_1session_1_1shm_1_1classic_1_1Session__server.html#ac87840d13847fca013ef3f64de8dbcce">app_shm_reader_config</a> (const <a class="el" href="structipc_1_1session_1_1Client__app.html">Client_app</a> &amp;app)</td></tr>
<tr class="memdesc:ac87840d13847fca013ef3f64de8dbcce"><td class="mdescLeft">&#160;</td><td class="mdescRight">Returns reader config counterpart to <a class="el" href="classipc_1_1session_1_1shm_1_1classic_1_1Session__server.html#ad0dafea47293d23e079b6b5c5c6a9cef" title="Returns builder config suitable for capnp-serializing out-messages in SHM arena app_shm() for the sam...">app_shm_builder_config()</a> for a given <code><a class="el" href="structipc_1_1session_1_1Client__app.html" title="An App that is used as a client in at least one client-server IPC split.">Client_app</a> app</code>.  <a href="classipc_1_1session_1_1shm_1_1classic_1_1Session__server.html#ac87840d13847fca013ef3f64de8dbcce">More...</a><br /></td></tr>
<tr class="separator:ac87840d13847fca013ef3f64de8dbcce"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a952348e52fda298ef7fd6b47295bf8b8"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classipc_1_1session_1_1shm_1_1classic_1_1Session__server.html#a952348e52fda298ef7fd6b47295bf8b8">to_ostream</a> (std::ostream *os) const</td></tr>
<tr class="memdesc:a952348e52fda298ef7fd6b47295bf8b8"><td class="mdescLeft">&#160;</td><td class="mdescRight">Prints string representation to the given <code>ostream</code>.  <a href="classipc_1_1session_1_1shm_1_1classic_1_1Session__server.html#a952348e52fda298ef7fd6b47295bf8b8">More...</a><br /></td></tr>
<tr class="separator:a952348e52fda298ef7fd6b47295bf8b8"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table><table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="pri-types" name="pri-types"></a>
Private Types</h2></td></tr>
<tr class="memitem:aa2aaa84142feffe216d274d465c8bf5c"><td class="memItemLeft" align="right" valign="top">using&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classipc_1_1session_1_1shm_1_1classic_1_1Session__server.html#aa2aaa84142feffe216d274d465c8bf5c">Impl</a> = <a class="el" href="classipc_1_1session_1_1Session__server__impl.html">Session_server_impl</a>&lt; <a class="el" href="classipc_1_1session_1_1shm_1_1classic_1_1Session__server.html">Session_server</a>&lt; S_MQ_TYPE_OR_NONE, S_TRANSMIT_NATIVE_HANDLES, Mdt_payload &gt;, <a class="el" href="classipc_1_1session_1_1shm_1_1classic_1_1Server__session.html">Server_session</a>&lt; S_MQ_TYPE_OR_NONE, S_TRANSMIT_NATIVE_HANDLES, Mdt_payload &gt; &gt;</td></tr>
<tr class="memdesc:aa2aaa84142feffe216d274d465c8bf5c"><td class="mdescLeft">&#160;</td><td class="mdescRight">Short-hand for our base/core impl.  <a href="classipc_1_1session_1_1shm_1_1classic_1_1Session__server.html#aa2aaa84142feffe216d274d465c8bf5c">More...</a><br /></td></tr>
<tr class="separator:aa2aaa84142feffe216d274d465c8bf5c"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a7b5893d6c0f0b1b3e33bcd3f5d183d8e"><td class="memItemLeft" align="right" valign="top">using&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classipc_1_1session_1_1shm_1_1classic_1_1Session__server.html#a7b5893d6c0f0b1b3e33bcd3f5d183d8e">Mutex</a> = flow::util::Mutex_non_recursive</td></tr>
<tr class="memdesc:a7b5893d6c0f0b1b3e33bcd3f5d183d8e"><td class="mdescLeft">&#160;</td><td class="mdescRight">Short-hand for <a class="el" href="classipc_1_1session_1_1shm_1_1classic_1_1Session__server.html#aac8485479a47f222c36d683a7d5d5f47" title="Protects m_app_shm_by_name and m_shm_pool_names.">m_app_shm_mutex</a> type.  <a href="classipc_1_1session_1_1shm_1_1classic_1_1Session__server.html#a7b5893d6c0f0b1b3e33bcd3f5d183d8e">More...</a><br /></td></tr>
<tr class="separator:a7b5893d6c0f0b1b3e33bcd3f5d183d8e"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a42ca28a71eea0d638b8c7beae36e2412"><td class="memItemLeft" align="right" valign="top">using&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classipc_1_1session_1_1shm_1_1classic_1_1Session__server.html#a42ca28a71eea0d638b8c7beae36e2412">Lock_guard</a> = flow::util::Lock_guard&lt; <a class="el" href="classipc_1_1session_1_1shm_1_1classic_1_1Session__server.html#a7b5893d6c0f0b1b3e33bcd3f5d183d8e">Mutex</a> &gt;</td></tr>
<tr class="memdesc:a42ca28a71eea0d638b8c7beae36e2412"><td class="mdescLeft">&#160;</td><td class="mdescRight">Short-hand for <a class="el" href="classipc_1_1session_1_1shm_1_1classic_1_1Session__server.html#a7b5893d6c0f0b1b3e33bcd3f5d183d8e" title="Short-hand for m_app_shm_mutex type.">Mutex</a> lock.  <a href="classipc_1_1session_1_1shm_1_1classic_1_1Session__server.html#a42ca28a71eea0d638b8c7beae36e2412">More...</a><br /></td></tr>
<tr class="separator:a42ca28a71eea0d638b8c7beae36e2412"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="inherit_header pub_types_classipc_1_1session_1_1Session__server__impl"><td colspan="2" onclick="javascript:toggleInherit('pub_types_classipc_1_1session_1_1Session__server__impl')"><img src="closed.png" alt="-"/>&#160;Private Types inherited from <a class="el" href="classipc_1_1session_1_1Session__server__impl.html">ipc::session::Session_server_impl&lt; Session_server&lt; S_MQ_TYPE_OR_NONE, S_TRANSMIT_NATIVE_HANDLES, Mdt_payload &gt;, Server_session&lt; S_MQ_TYPE_OR_NONE, S_TRANSMIT_NATIVE_HANDLES, Mdt_payload &gt; &gt;</a></td></tr>
<tr class="memitem:a47625f247dea35cf276d31c039c6bf0c inherit pub_types_classipc_1_1session_1_1Session__server__impl"><td class="memItemLeft" align="right" valign="top">using&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classipc_1_1session_1_1Session__server__impl.html#a47625f247dea35cf276d31c039c6bf0c">Session_server_obj</a> = <a class="el" href="classipc_1_1session_1_1Session__server.html">Session_server</a>&lt; S_MQ_TYPE_OR_NONE, S_TRANSMIT_NATIVE_HANDLES, Mdt_payload &gt;</td></tr>
<tr class="memdesc:a47625f247dea35cf276d31c039c6bf0c inherit pub_types_classipc_1_1session_1_1Session__server__impl"><td class="mdescLeft">&#160;</td><td class="mdescRight">See <a class="el" href="classipc_1_1session_1_1Session__server__impl.html#ad7cd4d77db826af9fe39c17e8ee7ca37" title="Returns pointer to the object that is privately sub-classing us.">this_session_srv()</a>.  <a href="classipc_1_1session_1_1Session__server__impl.html#a47625f247dea35cf276d31c039c6bf0c">More...</a><br /></td></tr>
<tr class="separator:a47625f247dea35cf276d31c039c6bf0c inherit pub_types_classipc_1_1session_1_1Session__server__impl"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a0009247dd98ec58b22040d1c65bb5a54 inherit pub_types_classipc_1_1session_1_1Session__server__impl"><td class="memItemLeft" align="right" valign="top">using&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classipc_1_1session_1_1Session__server__impl.html#a0009247dd98ec58b22040d1c65bb5a54">Server_session_obj</a> = <a class="el" href="namespaceipc_1_1session.html#ab01d5bce0ab2f3435ca9dd88d27609dc">Server_session</a>&lt; S_MQ_TYPE_OR_NONE, S_TRANSMIT_NATIVE_HANDLES, Mdt_payload &gt;</td></tr>
<tr class="memdesc:a0009247dd98ec58b22040d1c65bb5a54 inherit pub_types_classipc_1_1session_1_1Session__server__impl"><td class="mdescLeft">&#160;</td><td class="mdescRight">Useful short-hand for the concrete <code>Server_session</code> type emitted by <a class="el" href="classipc_1_1session_1_1Session__server__impl.html#a60ec88b23d73c354959a1e11636dc717" title="See Session_server method.">async_accept()</a>.  <a href="classipc_1_1session_1_1Session__server__impl.html#a0009247dd98ec58b22040d1c65bb5a54">More...</a><br /></td></tr>
<tr class="separator:a0009247dd98ec58b22040d1c65bb5a54 inherit pub_types_classipc_1_1session_1_1Session__server__impl"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a86de1d5b7cae35d89827c3235e2b8d89 inherit pub_types_classipc_1_1session_1_1Session__server__impl"><td class="memItemLeft" align="right" valign="top">using&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classipc_1_1session_1_1Session__server__impl.html#a86de1d5b7cae35d89827c3235e2b8d89">Mdt_reader_ptr</a> = typename <a class="el" href="classipc_1_1session_1_1Session__mv.html#a2b1215fb0c9738b9fcfbb337d23c43df">Server_session_obj::Mdt_reader_ptr</a></td></tr>
<tr class="memdesc:a86de1d5b7cae35d89827c3235e2b8d89 inherit pub_types_classipc_1_1session_1_1Session__server__impl"><td class="mdescLeft">&#160;</td><td class="mdescRight">Short-hand for Session_mv::Mdt_reader_ptr.  <a href="classipc_1_1session_1_1Session__server__impl.html#a86de1d5b7cae35d89827c3235e2b8d89">More...</a><br /></td></tr>
<tr class="separator:a86de1d5b7cae35d89827c3235e2b8d89 inherit pub_types_classipc_1_1session_1_1Session__server__impl"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a9ad5c6cbb1c9378d42ec5cd909389dc2 inherit pub_types_classipc_1_1session_1_1Session__server__impl"><td class="memItemLeft" align="right" valign="top">using&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classipc_1_1session_1_1Session__server__impl.html#a9ad5c6cbb1c9378d42ec5cd909389dc2">Channels</a> = typename <a class="el" href="classipc_1_1session_1_1Session__mv.html#af87da439644b2afd73d6a13d97e7985f">Server_session_obj::Channels</a></td></tr>
<tr class="memdesc:a9ad5c6cbb1c9378d42ec5cd909389dc2 inherit pub_types_classipc_1_1session_1_1Session__server__impl"><td class="mdescLeft">&#160;</td><td class="mdescRight">Short-hand for Session_mv::Channels.  <a href="classipc_1_1session_1_1Session__server__impl.html#a9ad5c6cbb1c9378d42ec5cd909389dc2">More...</a><br /></td></tr>
<tr class="separator:a9ad5c6cbb1c9378d42ec5cd909389dc2 inherit pub_types_classipc_1_1session_1_1Session__server__impl"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table><table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="pri-methods" name="pri-methods"></a>
Private Member Functions</h2></td></tr>
<tr class="memitem:a406e3860e68d2e863e64215aae43812e"><td class="memItemLeft" align="right" valign="top"><a class="el" href="namespaceipc.html#aa3192e586cc45d3e7c22463bf2760f89">Error_code</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classipc_1_1session_1_1shm_1_1classic_1_1Session__server.html#a406e3860e68d2e863e64215aae43812e">init_app_shm_as_needed</a> (const <a class="el" href="structipc_1_1session_1_1Client__app.html">Client_app</a> &amp;app)</td></tr>
<tr class="memdesc:a406e3860e68d2e863e64215aae43812e"><td class="mdescLeft">&#160;</td><td class="mdescRight">Implementation of our <code>per_app_setup_func()</code> customization point used in the ctor impl: invoked from an unspecified thread, asynchronously, by <a class="el" href="classipc_1_1session_1_1shm_1_1classic_1_1Session__server.html#ac6733bac776ecd2995f41cb0feb81d63" title="Contract identical to simpler session::Session_server::async_accept() overload; but internally ensure...">async_accept()</a> during log-in, it synchronously makes it so that <code>this-&gt;app_shm(app)</code> returns non-null from now on.  <a href="classipc_1_1session_1_1shm_1_1classic_1_1Session__server.html#a406e3860e68d2e863e64215aae43812e">More...</a><br /></td></tr>
<tr class="separator:a406e3860e68d2e863e64215aae43812e"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="inherit_header pub_methods_classipc_1_1session_1_1Session__server__impl"><td colspan="2" onclick="javascript:toggleInherit('pub_methods_classipc_1_1session_1_1Session__server__impl')"><img src="closed.png" alt="-"/>&#160;Private Member Functions inherited from <a class="el" href="classipc_1_1session_1_1Session__server__impl.html">ipc::session::Session_server_impl&lt; Session_server&lt; S_MQ_TYPE_OR_NONE, S_TRANSMIT_NATIVE_HANDLES, Mdt_payload &gt;, Server_session&lt; S_MQ_TYPE_OR_NONE, S_TRANSMIT_NATIVE_HANDLES, Mdt_payload &gt; &gt;</a></td></tr>
<tr class="memitem:a9bf4d5502b41c98a98fee4cc3c2f2530 inherit pub_methods_classipc_1_1session_1_1Session__server__impl"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classipc_1_1session_1_1Session__server__impl.html#a9bf4d5502b41c98a98fee4cc3c2f2530">Session_server_impl</a> (flow::log::Logger *logger_ptr, <a class="el" href="classipc_1_1session_1_1Session__server__impl.html#a47625f247dea35cf276d31c039c6bf0c">Session_server_obj</a> *this_session_srv_arg, const <a class="el" href="structipc_1_1session_1_1Server__app.html">Server_app</a> &amp;srv_app_ref, const <a class="el" href="structipc_1_1session_1_1Client__app.html#add718cbf6aa1d2abb26fbadcc974a7bd">Client_app::Master_set</a> &amp;cli_app_master_set_ref, <a class="el" href="namespaceipc.html#aa3192e586cc45d3e7c22463bf2760f89">Error_code</a> *err_code, Per_app_setup_func &amp;&amp;per_app_setup_func)</td></tr>
<tr class="memdesc:a9bf4d5502b41c98a98fee4cc3c2f2530 inherit pub_methods_classipc_1_1session_1_1Session__server__impl"><td class="mdescLeft">&#160;</td><td class="mdescRight">See Session_server ctor; it does that.  <a href="classipc_1_1session_1_1Session__server__impl.html#a9bf4d5502b41c98a98fee4cc3c2f2530">More...</a><br /></td></tr>
<tr class="separator:a9bf4d5502b41c98a98fee4cc3c2f2530 inherit pub_methods_classipc_1_1session_1_1Session__server__impl"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ae4388def520aad700a3fcdfc95b6f24e inherit pub_methods_classipc_1_1session_1_1Session__server__impl"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classipc_1_1session_1_1Session__server__impl.html#ae4388def520aad700a3fcdfc95b6f24e">~Session_server_impl</a> ()</td></tr>
<tr class="memdesc:ae4388def520aad700a3fcdfc95b6f24e inherit pub_methods_classipc_1_1session_1_1Session__server__impl"><td class="mdescLeft">&#160;</td><td class="mdescRight">See Session_server dtor.  <a href="classipc_1_1session_1_1Session__server__impl.html#ae4388def520aad700a3fcdfc95b6f24e">More...</a><br /></td></tr>
<tr class="separator:ae4388def520aad700a3fcdfc95b6f24e inherit pub_methods_classipc_1_1session_1_1Session__server__impl"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a60ec88b23d73c354959a1e11636dc717 inherit pub_methods_classipc_1_1session_1_1Session__server__impl"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classipc_1_1session_1_1Session__server__impl.html#a60ec88b23d73c354959a1e11636dc717">async_accept</a> (<a class="el" href="classipc_1_1session_1_1Session__server__impl.html#a0009247dd98ec58b22040d1c65bb5a54">Server_session_obj</a> *target_session, <a class="el" href="classipc_1_1session_1_1Session__server__impl.html#a9ad5c6cbb1c9378d42ec5cd909389dc2">Channels</a> *init_channels_by_srv_req, <a class="el" href="classipc_1_1session_1_1Session__server__impl.html#a86de1d5b7cae35d89827c3235e2b8d89">Mdt_reader_ptr</a> *mdt_from_cli_or_null, <a class="el" href="classipc_1_1session_1_1Session__server__impl.html#a9ad5c6cbb1c9378d42ec5cd909389dc2">Channels</a> *init_channels_by_cli_req, N_init_channels_by_srv_req_func &amp;&amp;n_init_channels_by_srv_req_func, Mdt_load_func &amp;&amp;mdt_load_func, Task_err &amp;&amp;on_done_func)</td></tr>
<tr class="memdesc:a60ec88b23d73c354959a1e11636dc717 inherit pub_methods_classipc_1_1session_1_1Session__server__impl"><td class="mdescLeft">&#160;</td><td class="mdescRight">See Session_server method.  <a href="classipc_1_1session_1_1Session__server__impl.html#a60ec88b23d73c354959a1e11636dc717">More...</a><br /></td></tr>
<tr class="separator:a60ec88b23d73c354959a1e11636dc717 inherit pub_methods_classipc_1_1session_1_1Session__server__impl"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a2a3c0c330d477176b714a9920196775d inherit pub_methods_classipc_1_1session_1_1Session__server__impl"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classipc_1_1session_1_1Session__server__impl.html#a2a3c0c330d477176b714a9920196775d">to_ostream</a> (std::ostream *os) const</td></tr>
<tr class="memdesc:a2a3c0c330d477176b714a9920196775d inherit pub_methods_classipc_1_1session_1_1Session__server__impl"><td class="mdescLeft">&#160;</td><td class="mdescRight">See Server_session method.  <a href="classipc_1_1session_1_1Session__server__impl.html#a2a3c0c330d477176b714a9920196775d">More...</a><br /></td></tr>
<tr class="separator:a2a3c0c330d477176b714a9920196775d inherit pub_methods_classipc_1_1session_1_1Session__server__impl"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ad7cd4d77db826af9fe39c17e8ee7ca37 inherit pub_methods_classipc_1_1session_1_1Session__server__impl"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classipc_1_1session_1_1Session__server__impl.html#a47625f247dea35cf276d31c039c6bf0c">Session_server_obj</a> *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classipc_1_1session_1_1Session__server__impl.html#ad7cd4d77db826af9fe39c17e8ee7ca37">this_session_srv</a> ()</td></tr>
<tr class="memdesc:ad7cd4d77db826af9fe39c17e8ee7ca37 inherit pub_methods_classipc_1_1session_1_1Session__server__impl"><td class="mdescLeft">&#160;</td><td class="mdescRight">Returns pointer to the object that is <code>private</code>ly sub-classing us.  <a href="classipc_1_1session_1_1Session__server__impl.html#ad7cd4d77db826af9fe39c17e8ee7ca37">More...</a><br /></td></tr>
<tr class="separator:ad7cd4d77db826af9fe39c17e8ee7ca37 inherit pub_methods_classipc_1_1session_1_1Session__server__impl"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a40fca0b878f9150f5f7db55768da45ad inherit pub_methods_classipc_1_1session_1_1Session__server__impl"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classipc_1_1session_1_1Session__server__impl.html#a40fca0b878f9150f5f7db55768da45ad">sub_class_set_deinit_func</a> (Task &amp;&amp;task)</td></tr>
<tr class="memdesc:a40fca0b878f9150f5f7db55768da45ad inherit pub_methods_classipc_1_1session_1_1Session__server__impl"><td class="mdescLeft">&#160;</td><td class="mdescRight">Utility for sub-classes: ensures that <code>task()</code> is invoked near the end of <code>*this</code> dtor's execution, after <em>all</em> other (mutable) state has been destroyed, including stopping/joining any threads performing async <a class="el" href="classipc_1_1session_1_1Session__server__impl.html#a60ec88b23d73c354959a1e11636dc717" title="See Session_server method.">async_accept()</a> ops.  <a href="classipc_1_1session_1_1Session__server__impl.html#a40fca0b878f9150f5f7db55768da45ad">More...</a><br /></td></tr>
<tr class="separator:a40fca0b878f9150f5f7db55768da45ad inherit pub_methods_classipc_1_1session_1_1Session__server__impl"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table><table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="pri-attribs" name="pri-attribs"></a>
Private Attributes</h2></td></tr>
<tr class="memitem:ae86848eb54eac26e276cee29a0eb030a"><td class="memItemLeft" align="right" valign="top">size_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classipc_1_1session_1_1shm_1_1classic_1_1Session__server.html#ae86848eb54eac26e276cee29a0eb030a">m_pool_size_limit_mi</a></td></tr>
<tr class="memdesc:ae86848eb54eac26e276cee29a0eb030a"><td class="mdescLeft">&#160;</td><td class="mdescRight">See <a class="el" href="classipc_1_1session_1_1shm_1_1classic_1_1Session__server.html#af6472e74db4dee7cf5ce5be55ded4179" title="The pool-size value, in mebibytes, which will be used to size the pool in subsequent async_accept()s.">pool_size_limit_mi()</a>.  <a href="classipc_1_1session_1_1shm_1_1classic_1_1Session__server.html#ae86848eb54eac26e276cee29a0eb030a">More...</a><br /></td></tr>
<tr class="separator:ae86848eb54eac26e276cee29a0eb030a"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a58684b85b4cfe6c4095bc56f2700ec27"><td class="memItemLeft" align="right" valign="top">const <a class="el" href="structipc_1_1session_1_1Server__app.html">Server_app</a> &amp;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classipc_1_1session_1_1shm_1_1classic_1_1Session__server.html#a58684b85b4cfe6c4095bc56f2700ec27">m_srv_app_ref</a></td></tr>
<tr class="memdesc:a58684b85b4cfe6c4095bc56f2700ec27"><td class="mdescLeft">&#160;</td><td class="mdescRight">Identical to <a class="el" href="classipc_1_1session_1_1shm_1_1classic_1_1Session__server.html#a58684b85b4cfe6c4095bc56f2700ec27" title="Identical to Session_server::m_srv_app_ref. Used in init_app_shm_as_needed() name calc.">Session_server::m_srv_app_ref</a>. Used in <a class="el" href="classipc_1_1session_1_1shm_1_1classic_1_1Session__server.html#a406e3860e68d2e863e64215aae43812e" title="Implementation of our per_app_setup_func() customization point used in the ctor impl: invoked from an...">init_app_shm_as_needed()</a> name calc.  <a href="classipc_1_1session_1_1shm_1_1classic_1_1Session__server.html#a58684b85b4cfe6c4095bc56f2700ec27">More...</a><br /></td></tr>
<tr class="separator:a58684b85b4cfe6c4095bc56f2700ec27"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a1034bc43eb088ede11111b97f79aff96"><td class="memItemLeft" align="right" valign="top">const <a class="el" href="namespaceipc_1_1session.html#a6d07d9996af19e57eb42416e914110ea">Shared_name</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classipc_1_1session_1_1shm_1_1classic_1_1Session__server.html#a1034bc43eb088ede11111b97f79aff96">m_srv_namespace</a></td></tr>
<tr class="memdesc:a1034bc43eb088ede11111b97f79aff96"><td class="mdescLeft">&#160;</td><td class="mdescRight">Identical <a class="el" href="classipc_1_1session_1_1Session__base.html#a60a30526bad0c8db6ad05ede618a22bd" title="See srv_namespace().">Session_base::m_srv_namespace</a>. Used in <a class="el" href="classipc_1_1session_1_1shm_1_1classic_1_1Session__server.html#a406e3860e68d2e863e64215aae43812e" title="Implementation of our per_app_setup_func() customization point used in the ctor impl: invoked from an...">init_app_shm_as_needed()</a> name calc.  <a href="classipc_1_1session_1_1shm_1_1classic_1_1Session__server.html#a1034bc43eb088ede11111b97f79aff96">More...</a><br /></td></tr>
<tr class="separator:a1034bc43eb088ede11111b97f79aff96"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:aac8485479a47f222c36d683a7d5d5f47"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classipc_1_1session_1_1shm_1_1classic_1_1Session__server.html#a7b5893d6c0f0b1b3e33bcd3f5d183d8e">Mutex</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classipc_1_1session_1_1shm_1_1classic_1_1Session__server.html#aac8485479a47f222c36d683a7d5d5f47">m_app_shm_mutex</a></td></tr>
<tr class="memdesc:aac8485479a47f222c36d683a7d5d5f47"><td class="mdescLeft">&#160;</td><td class="mdescRight">Protects <a class="el" href="classipc_1_1session_1_1shm_1_1classic_1_1Session__server.html#a820b0bbdc3b27961be178e572d9fb529" title="The per-app-scope SHM arenas by App::m_name.">m_app_shm_by_name</a> and <a class="el" href="classipc_1_1session_1_1shm_1_1classic_1_1Session__server.html#af4d3de8bd66de27bf740ba3eeb1d988f" title="Set of names of every SHM-pool created w/r/t m_app_shm_by_name.">m_shm_pool_names</a>.  <a href="classipc_1_1session_1_1shm_1_1classic_1_1Session__server.html#aac8485479a47f222c36d683a7d5d5f47">More...</a><br /></td></tr>
<tr class="separator:aac8485479a47f222c36d683a7d5d5f47"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a820b0bbdc3b27961be178e572d9fb529"><td class="memItemLeft" align="right" valign="top">boost::unordered_map&lt; std::string, boost::movelib::unique_ptr&lt; <a class="el" href="classipc_1_1session_1_1shm_1_1classic_1_1Session__server.html#ae4d637a7d4082c639b7ef7654cc616f3">Arena</a> &gt; &gt;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classipc_1_1session_1_1shm_1_1classic_1_1Session__server.html#a820b0bbdc3b27961be178e572d9fb529">m_app_shm_by_name</a></td></tr>
<tr class="memdesc:a820b0bbdc3b27961be178e572d9fb529"><td class="mdescLeft">&#160;</td><td class="mdescRight">The per-app-scope SHM arenas by <a class="el" href="structipc_1_1session_1_1App.html#a8e67b57829fe43a122a23c699b5de8fd" title="Brief application name, readable to humans and unique across all other applications&#39; names; used both...">App::m_name</a>.  <a href="classipc_1_1session_1_1shm_1_1classic_1_1Session__server.html#a820b0bbdc3b27961be178e572d9fb529">More...</a><br /></td></tr>
<tr class="separator:a820b0bbdc3b27961be178e572d9fb529"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:af4d3de8bd66de27bf740ba3eeb1d988f"><td class="memItemLeft" align="right" valign="top">boost::shared_ptr&lt; std::vector&lt; <a class="el" href="namespaceipc_1_1session.html#a6d07d9996af19e57eb42416e914110ea">Shared_name</a> &gt; &gt;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classipc_1_1session_1_1shm_1_1classic_1_1Session__server.html#af4d3de8bd66de27bf740ba3eeb1d988f">m_shm_pool_names</a></td></tr>
<tr class="memdesc:af4d3de8bd66de27bf740ba3eeb1d988f"><td class="mdescLeft">&#160;</td><td class="mdescRight">Set of names of every SHM-pool created w/r/t <a class="el" href="classipc_1_1session_1_1shm_1_1classic_1_1Session__server.html#a820b0bbdc3b27961be178e572d9fb529" title="The per-app-scope SHM arenas by App::m_name.">m_app_shm_by_name</a>.  <a href="classipc_1_1session_1_1shm_1_1classic_1_1Session__server.html#af4d3de8bd66de27bf740ba3eeb1d988f">More...</a><br /></td></tr>
<tr class="separator:af4d3de8bd66de27bf740ba3eeb1d988f"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="inherit_header pub_attribs_classipc_1_1session_1_1Session__server__impl"><td colspan="2" onclick="javascript:toggleInherit('pub_attribs_classipc_1_1session_1_1Session__server__impl')"><img src="closed.png" alt="-"/>&#160;Private Attributes inherited from <a class="el" href="classipc_1_1session_1_1Session__server__impl.html">ipc::session::Session_server_impl&lt; Session_server&lt; S_MQ_TYPE_OR_NONE, S_TRANSMIT_NATIVE_HANDLES, Mdt_payload &gt;, Server_session&lt; S_MQ_TYPE_OR_NONE, S_TRANSMIT_NATIVE_HANDLES, Mdt_payload &gt; &gt;</a></td></tr>
<tr class="memitem:a7be0cca184cdba62b9748e0ca37b8b17 inherit pub_attribs_classipc_1_1session_1_1Session__server__impl"><td class="memItemLeft" align="right" valign="top">const <a class="el" href="structipc_1_1session_1_1Server__app.html">Server_app</a> &amp;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classipc_1_1session_1_1Session__server__impl.html#a7be0cca184cdba62b9748e0ca37b8b17">m_srv_app_ref</a></td></tr>
<tr class="memdesc:a7be0cca184cdba62b9748e0ca37b8b17 inherit pub_attribs_classipc_1_1session_1_1Session__server__impl"><td class="mdescLeft">&#160;</td><td class="mdescRight">See Session_server public data member.  <a href="classipc_1_1session_1_1Session__server__impl.html#a7be0cca184cdba62b9748e0ca37b8b17">More...</a><br /></td></tr>
<tr class="separator:a7be0cca184cdba62b9748e0ca37b8b17 inherit pub_attribs_classipc_1_1session_1_1Session__server__impl"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table><table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="related" name="related"></a>
Related Functions</h2></td></tr>
<tr><td class="ititle" colspan="2"><p >(Note that these are not member functions.) </p>
</td></tr>
<tr class="memitem:a4556b229bf2bfc3c9eb51af13c47de3d"><td class="memTemplParams" colspan="2">template&lt;schema::MqType S_MQ_TYPE_OR_NONE, bool S_TRANSMIT_NATIVE_HANDLES, typename Mdt_payload &gt; </td></tr>
<tr class="memitem:a4556b229bf2bfc3c9eb51af13c47de3d"><td class="memTemplItemLeft" align="right" valign="top">std::ostream &amp;&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="classipc_1_1session_1_1shm_1_1classic_1_1Session__server.html#a4556b229bf2bfc3c9eb51af13c47de3d">operator&lt;&lt;</a> (std::ostream &amp;os, const <a class="el" href="classipc_1_1session_1_1shm_1_1classic_1_1Session__server.html">Session_server</a>&lt; S_MQ_TYPE_OR_NONE, S_TRANSMIT_NATIVE_HANDLES, Mdt_payload &gt; &amp;val)</td></tr>
<tr class="memdesc:a4556b229bf2bfc3c9eb51af13c47de3d"><td class="mdescLeft">&#160;</td><td class="mdescRight">Prints string representation of the given <code><a class="el" href="classipc_1_1session_1_1shm_1_1classic_1_1Session__server.html" title="This is to vanilla Session_server what shm::classic::Server_session is to vanilla Server_session: it ...">Session_server</a></code> to the given <code>ostream</code>.  <a href="classipc_1_1session_1_1shm_1_1classic_1_1Session__server.html#a4556b229bf2bfc3c9eb51af13c47de3d">More...</a><br /></td></tr>
<tr class="separator:a4556b229bf2bfc3c9eb51af13c47de3d"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="inherit_header related_classipc_1_1session_1_1Session__server__impl"><td colspan="2" onclick="javascript:toggleInherit('related_classipc_1_1session_1_1Session__server__impl')"><img src="closed.png" alt="-"/>&#160;Related Functions inherited from <a class="el" href="classipc_1_1session_1_1Session__server__impl.html">ipc::session::Session_server_impl&lt; Session_server&lt; S_MQ_TYPE_OR_NONE, S_TRANSMIT_NATIVE_HANDLES, Mdt_payload &gt;, Server_session&lt; S_MQ_TYPE_OR_NONE, S_TRANSMIT_NATIVE_HANDLES, Mdt_payload &gt; &gt;</a></td></tr>
<tr class="memitem:a5fc42e333522f7b1ed11fbff4ae72e5c inherit related_classipc_1_1session_1_1Session__server__impl"><td class="memItemLeft" align="right" valign="top">std::ostream &amp;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classipc_1_1session_1_1Session__server__impl.html#a5fc42e333522f7b1ed11fbff4ae72e5c">operator&lt;&lt;</a> (std::ostream &amp;os, const <a class="el" href="classipc_1_1session_1_1Session__server__impl.html">Session_server_impl</a>&lt; <a class="el" href="classipc_1_1session_1_1Session__server.html">Session_server</a>&lt; S_MQ_TYPE_OR_NONE, S_TRANSMIT_NATIVE_HANDLES, Mdt_payload &gt;, <a class="el" href="namespaceipc_1_1session.html#ab01d5bce0ab2f3435ca9dd88d27609dc">Server_session</a>&lt; S_MQ_TYPE_OR_NONE, S_TRANSMIT_NATIVE_HANDLES, Mdt_payload &gt; &gt; &amp;val)</td></tr>
<tr class="memdesc:a5fc42e333522f7b1ed11fbff4ae72e5c inherit related_classipc_1_1session_1_1Session__server__impl"><td class="mdescLeft">&#160;</td><td class="mdescRight">Prints string representation of the given <code>Session_server_impl</code> to the given <code>ostream</code>.  <a href="classipc_1_1session_1_1Session__server__impl.html#a5fc42e333522f7b1ed11fbff4ae72e5c">More...</a><br /></td></tr>
<tr class="separator:a5fc42e333522f7b1ed11fbff4ae72e5c inherit related_classipc_1_1session_1_1Session__server__impl"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table>
<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
<div class="textblock"><div class="compoundTemplParams">template&lt;schema::MqType S_MQ_TYPE_OR_NONE, bool S_TRANSMIT_NATIVE_HANDLES, typename Mdt_payload&gt;<br />
class ipc::session::shm::classic::Session_server&lt; S_MQ_TYPE_OR_NONE, S_TRANSMIT_NATIVE_HANDLES, Mdt_payload &gt;</div><p >This is to vanilla <a class="el" href="classipc_1_1session_1_1shm_1_1classic_1_1Session__server.html" title="This is to vanilla Session_server what shm::classic::Server_session is to vanilla Server_session: it ...">Session_server</a> what <a class="el" href="classipc_1_1session_1_1shm_1_1classic_1_1Server__session.html" title="Identical to session::Server_session in every way, except that it makes available two SHM arenas,...">shm::classic::Server_session</a> is to vanilla <a class="el" href="namespaceipc_1_1session.html#ab01d5bce0ab2f3435ca9dd88d27609dc" title="A vanilla Server_session with no optional capabilities.">Server_session</a>: it is the session-server type that starts SHM-enabled sessions with SHM-classic provider (<a class="el" href="classipc_1_1shm_1_1classic_1_1Pool__arena.html" title="A SHM-classic interface around a single SHM pool with allocation-algorithm services by boost....">ipc::shm::classic::Pool_arena</a>). </p>
<p >Its API is identical to that of <a class="el" href="classipc_1_1session_1_1shm_1_1classic_1_1Session__server.html" title="This is to vanilla Session_server what shm::classic::Server_session is to vanilla Server_session: it ...">Session_server</a>, except that it emits <a class="el" href="classipc_1_1session_1_1shm_1_1classic_1_1Session__server.html#a2330c13a2c20303d4be4adfe4c74b2b9" title="Short-hand for the concrete Server_session-like type emitted by async_accept().">Server_session_obj</a> that are <a class="el" href="classipc_1_1session_1_1shm_1_1classic_1_1Server__session.html" title="Identical to session::Server_session in every way, except that it makes available two SHM arenas,...">shm::classic::Server_session</a> and not vanilla <a class="el" href="namespaceipc_1_1session.html#ab01d5bce0ab2f3435ca9dd88d27609dc" title="A vanilla Server_session with no optional capabilities.">Server_session</a>. In addition:</p>
<h3>Max pool size configuration API (optional)</h3>
<p >If using this, as opposed to (at least) SHM-jemalloc provider (<a class="el" href="classipc_1_1session_1_1shm_1_1arena__lend_1_1jemalloc_1_1Session__server.html" title="This is to vanilla Session_server what shm::arena_lend::jemalloc::Server_session is to vanilla Server...">session::shm::arena_lend::jemalloc::Session_server</a>), you could potentially encounter "No space left on device" (<code>ENOSPC</code> in at least Linux) in <a class="el" href="classipc_1_1session_1_1shm_1_1classic_1_1Session__server.html#ac6733bac776ecd2995f41cb0feb81d63" title="Contract identical to simpler session::Session_server::async_accept() overload; but internally ensure...">async_accept()</a>. This has nothing to do with drive space, or even physical RAM in fact. It has to do with certain kernel parameters governing virtual SHM-mapped space. If this becomes a problem then please look into <a class="el" href="classipc_1_1session_1_1shm_1_1classic_1_1Session__server.html#af6472e74db4dee7cf5ce5be55ded4179" title="The pool-size value, in mebibytes, which will be used to size the pool in subsequent async_accept()s.">Session_server::pool_size_limit_mi()</a> API. See the doc header for the accessor for discussion.</p>
<p >In most cases it should not come up.</p>
<h3>Implementation</h3>
<p >See similar section of <a class="el" href="classipc_1_1session_1_1Session__server.html" title="To be instantiated typically once in a given process, an object of this type asynchronously listens f...">session::Session_server</a>. It explains why we sub-class <a class="el" href="classipc_1_1session_1_1Session__server__impl.html" title="Internal class template comprising API/logic common to every Session_server variant,...">Session_server_impl</a> and even how how that's used for this SHM-classic scenario. To reiterate:</p>
<p >We use 2 of 2 available customization points of <code>private</code> super-class <a class="el" href="classipc_1_1session_1_1Session__server__impl.html" title="Internal class template comprising API/logic common to every Session_server variant,...">Session_server_impl</a>. We:</p><ul>
<li>pass-up a <code>per_app_setup_func()</code> that, given the new session's desired <a class="el" href="structipc_1_1session_1_1Client__app.html" title="An App that is used as a client in at least one client-server IPC split.">Client_app</a>, creates-if-needed the per-app SHM-arena and keeps handle open as well as available via <code>this-&gt;app_shm(Client_app::m_name)</code>; and</li>
<li>parameterize <a class="el" href="classipc_1_1session_1_1Session__server__impl.html" title="Internal class template comprising API/logic common to every Session_server variant,...">Session_server_impl</a> on <a class="el" href="classipc_1_1session_1_1shm_1_1classic_1_1Server__session.html" title="Identical to session::Server_session in every way, except that it makes available two SHM arenas,...">shm::classic::Server_session</a> which, during log-in, creates the per-session SHM-arena and keeps handle open; and saves <code>this-&gt;app_shm(Client_app::m_name)</code>.</li>
</ul>
<p ><a class="el" href="classipc_1_1session_1_1shm_1_1classic_1_1Server__session.html" title="Identical to session::Server_session in every way, except that it makes available two SHM arenas,...">shm::classic::Server_session</a> doc header delves deeply into the entire impl strategy for setting up these arenas. If you read/grok that, then the present class's impl should be straightforward to follow. </p>
<dl class="tparams"><dt>Template Parameters</dt><dd>
  <table class="tparams">
    <tr><td class="paramname">S_MQ_TYPE_OR_NONE</td><td>See vanilla <a class="el" href="classipc_1_1session_1_1shm_1_1classic_1_1Session__server.html#af10bb97219c59c34fce50be09eaacf0c" title="Constructor: identical to session::Session_server ctor.">Session_server</a>. </td></tr>
    <tr><td class="paramname">S_TRANSMIT_NATIVE_HANDLES</td><td>See vanilla <a class="el" href="classipc_1_1session_1_1shm_1_1classic_1_1Session__server.html#af10bb97219c59c34fce50be09eaacf0c" title="Constructor: identical to session::Session_server ctor.">Session_server</a>. </td></tr>
    <tr><td class="paramname">Mdt_payload</td><td>See vanilla <a class="el" href="classipc_1_1session_1_1shm_1_1classic_1_1Session__server.html#af10bb97219c59c34fce50be09eaacf0c" title="Constructor: identical to session::Session_server ctor.">Session_server</a>. </td></tr>
  </table>
  </dd>
</dl>

<p class="definition">Definition at line <a class="el" href="ipc__shm_2src_2ipc_2session_2shm_2classic_2session__server_8hpp_source.html#l00070">70</a> of file <a class="el" href="ipc__shm_2src_2ipc_2session_2shm_2classic_2session__server_8hpp_source.html">session_server.hpp</a>.</p>
</div><h2 class="groupheader">Member Typedef Documentation</h2>
<a id="ae4d637a7d4082c639b7ef7654cc616f3" name="ae4d637a7d4082c639b7ef7654cc616f3"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ae4d637a7d4082c639b7ef7654cc616f3">&#9670;&nbsp;</a></span>Arena</h2>

<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;schema::MqType S_MQ_TYPE_OR_NONE, bool S_TRANSMIT_NATIVE_HANDLES, typename Mdt_payload &gt; </div>
      <table class="memname">
        <tr>
          <td class="memname">using <a class="el" href="classipc_1_1session_1_1shm_1_1classic_1_1Session__server.html">ipc::session::shm::classic::Session_server</a>&lt; S_MQ_TYPE_OR_NONE, S_TRANSMIT_NATIVE_HANDLES, Mdt_payload &gt;::Arena =  typename <a class="el" href="classipc_1_1session_1_1shm_1_1classic_1_1Session__mv.html#a07c9b1803567c2714ae48433e756047f">Server_session_obj::Base::Arena</a></td>
        </tr>
      </table>
</div><div class="memdoc">

<p>Short-hand for <a class="el" href="classipc_1_1session_1_1shm_1_1classic_1_1Session__mv.html#a07c9b1803567c2714ae48433e756047f" title="The arena object on which one may call construct&lt;T&gt;(ctor_args...), where ctor_args are arguments to t...">shm::classic::Session_mv::Arena</a>. See <a class="el" href="classipc_1_1session_1_1shm_1_1classic_1_1Session__server.html#ae3e011716068f4e669bd7eed487cf207" title="Returns pointer to the per-app SHM-arena, whose lifetime extends until *this is destroyed; or null if...">app_shm()</a> in particular. </p>

<p class="definition">Definition at line <a class="el" href="ipc__shm_2src_2ipc_2session_2shm_2classic_2session__server_8hpp_source.html#l00099">99</a> of file <a class="el" href="ipc__shm_2src_2ipc_2session_2shm_2classic_2session__server_8hpp_source.html">session_server.hpp</a>.</p>

</div>
</div>
<a id="ab8f638542f33b5028e1db7ce7572fef3" name="ab8f638542f33b5028e1db7ce7572fef3"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ab8f638542f33b5028e1db7ce7572fef3">&#9670;&nbsp;</a></span>Channels</h2>

<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;schema::MqType S_MQ_TYPE_OR_NONE, bool S_TRANSMIT_NATIVE_HANDLES, typename Mdt_payload &gt; </div>
      <table class="memname">
        <tr>
          <td class="memname">using <a class="el" href="classipc_1_1session_1_1shm_1_1classic_1_1Session__server.html">ipc::session::shm::classic::Session_server</a>&lt; S_MQ_TYPE_OR_NONE, S_TRANSMIT_NATIVE_HANDLES, Mdt_payload &gt;::Channels =  typename Impl::Channels</td>
        </tr>
      </table>
</div><div class="memdoc">

<p>Short-hand for <a class="el" href="classipc_1_1session_1_1Session__mv.html#af87da439644b2afd73d6a13d97e7985f" title="Container (vector&lt;&gt;) of Channel_obj.">Session_mv::Channels</a>. </p>

<p class="definition">Definition at line <a class="el" href="ipc__shm_2src_2ipc_2session_2shm_2classic_2session__server_8hpp_source.html#l00096">96</a> of file <a class="el" href="ipc__shm_2src_2ipc_2session_2shm_2classic_2session__server_8hpp_source.html">session_server.hpp</a>.</p>

</div>
</div>
<a id="aa2aaa84142feffe216d274d465c8bf5c" name="aa2aaa84142feffe216d274d465c8bf5c"></a>
<h2 class="memtitle"><span class="permalink"><a href="#aa2aaa84142feffe216d274d465c8bf5c">&#9670;&nbsp;</a></span>Impl</h2>

<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;schema::MqType S_MQ_TYPE_OR_NONE, bool S_TRANSMIT_NATIVE_HANDLES, typename Mdt_payload &gt; </div>
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">using <a class="el" href="classipc_1_1session_1_1shm_1_1classic_1_1Session__server.html">ipc::session::shm::classic::Session_server</a>&lt; S_MQ_TYPE_OR_NONE, S_TRANSMIT_NATIVE_HANDLES, Mdt_payload &gt;::Impl =  <a class="el" href="classipc_1_1session_1_1Session__server__impl.html">Session_server_impl</a> &lt;<a class="el" href="classipc_1_1session_1_1shm_1_1classic_1_1Session__server.html">Session_server</a>&lt;S_MQ_TYPE_OR_NONE, S_TRANSMIT_NATIVE_HANDLES, Mdt_payload&gt;, <a class="el" href="classipc_1_1session_1_1shm_1_1classic_1_1Server__session.html">Server_session</a>&lt;S_MQ_TYPE_OR_NONE, S_TRANSMIT_NATIVE_HANDLES, Mdt_payload&gt; &gt;</td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">private</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p>Short-hand for our base/core impl. </p>

<p class="definition">Definition at line <a class="el" href="ipc__shm_2src_2ipc_2session_2shm_2classic_2session__server_8hpp_source.html#l00079">79</a> of file <a class="el" href="ipc__shm_2src_2ipc_2session_2shm_2classic_2session__server_8hpp_source.html">session_server.hpp</a>.</p>

</div>
</div>
<a id="a42ca28a71eea0d638b8c7beae36e2412" name="a42ca28a71eea0d638b8c7beae36e2412"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a42ca28a71eea0d638b8c7beae36e2412">&#9670;&nbsp;</a></span>Lock_guard</h2>

<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;schema::MqType S_MQ_TYPE_OR_NONE, bool S_TRANSMIT_NATIVE_HANDLES, typename Mdt_payload &gt; </div>
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">using <a class="el" href="classipc_1_1session_1_1shm_1_1classic_1_1Session__server.html">ipc::session::shm::classic::Session_server</a>&lt; S_MQ_TYPE_OR_NONE, S_TRANSMIT_NATIVE_HANDLES, Mdt_payload &gt;::Lock_guard =  flow::util::Lock_guard&lt;<a class="el" href="classipc_1_1session_1_1shm_1_1classic_1_1Session__server.html#a7b5893d6c0f0b1b3e33bcd3f5d183d8e">Mutex</a>&gt;</td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">private</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p>Short-hand for <a class="el" href="classipc_1_1session_1_1shm_1_1classic_1_1Session__server.html#a7b5893d6c0f0b1b3e33bcd3f5d183d8e" title="Short-hand for m_app_shm_mutex type.">Mutex</a> lock. </p>

<p class="definition">Definition at line <a class="el" href="ipc__shm_2src_2ipc_2session_2shm_2classic_2session__server_8hpp_source.html#l00381">381</a> of file <a class="el" href="ipc__shm_2src_2ipc_2session_2shm_2classic_2session__server_8hpp_source.html">session_server.hpp</a>.</p>

</div>
</div>
<a id="a81f60d9c8af965468c0887a2af4e2823" name="a81f60d9c8af965468c0887a2af4e2823"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a81f60d9c8af965468c0887a2af4e2823">&#9670;&nbsp;</a></span>Mdt_builder</h2>

<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;schema::MqType S_MQ_TYPE_OR_NONE, bool S_TRANSMIT_NATIVE_HANDLES, typename Mdt_payload &gt; </div>
      <table class="memname">
        <tr>
          <td class="memname">using <a class="el" href="classipc_1_1session_1_1shm_1_1classic_1_1Session__server.html">ipc::session::shm::classic::Session_server</a>&lt; S_MQ_TYPE_OR_NONE, S_TRANSMIT_NATIVE_HANDLES, Mdt_payload &gt;::Mdt_builder =  typename Server_session_obj::Mdt_builder</td>
        </tr>
      </table>
</div><div class="memdoc">

<p>Metadata builder type passed to <code>mdt_load_func()</code> in advanced <a class="el" href="classipc_1_1session_1_1shm_1_1classic_1_1Session__server.html#ac6733bac776ecd2995f41cb0feb81d63" title="Contract identical to simpler session::Session_server::async_accept() overload; but internally ensure...">async_accept()</a> overload. </p>

<p class="definition">Definition at line <a class="el" href="ipc__shm_2src_2ipc_2session_2shm_2classic_2session__server_8hpp_source.html#l00093">93</a> of file <a class="el" href="ipc__shm_2src_2ipc_2session_2shm_2classic_2session__server_8hpp_source.html">session_server.hpp</a>.</p>

</div>
</div>
<a id="aff4a736c67698d14a538276912e6101d" name="aff4a736c67698d14a538276912e6101d"></a>
<h2 class="memtitle"><span class="permalink"><a href="#aff4a736c67698d14a538276912e6101d">&#9670;&nbsp;</a></span>Mdt_reader_ptr</h2>

<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;schema::MqType S_MQ_TYPE_OR_NONE, bool S_TRANSMIT_NATIVE_HANDLES, typename Mdt_payload &gt; </div>
      <table class="memname">
        <tr>
          <td class="memname">using <a class="el" href="classipc_1_1session_1_1shm_1_1classic_1_1Session__server.html">ipc::session::shm::classic::Session_server</a>&lt; S_MQ_TYPE_OR_NONE, S_TRANSMIT_NATIVE_HANDLES, Mdt_payload &gt;::Mdt_reader_ptr =  typename Impl::Mdt_reader_ptr</td>
        </tr>
      </table>
</div><div class="memdoc">

<p>Short-hand for <a class="el" href="classipc_1_1session_1_1Session__mv.html#a2b1215fb0c9738b9fcfbb337d23c43df" title="Implements Session API per contract.">Session_mv::Mdt_reader_ptr</a>. </p>

<p class="definition">Definition at line <a class="el" href="ipc__shm_2src_2ipc_2session_2shm_2classic_2session__server_8hpp_source.html#l00090">90</a> of file <a class="el" href="ipc__shm_2src_2ipc_2session_2shm_2classic_2session__server_8hpp_source.html">session_server.hpp</a>.</p>

</div>
</div>
<a id="a7b5893d6c0f0b1b3e33bcd3f5d183d8e" name="a7b5893d6c0f0b1b3e33bcd3f5d183d8e"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a7b5893d6c0f0b1b3e33bcd3f5d183d8e">&#9670;&nbsp;</a></span>Mutex</h2>

<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;schema::MqType S_MQ_TYPE_OR_NONE, bool S_TRANSMIT_NATIVE_HANDLES, typename Mdt_payload &gt; </div>
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">using <a class="el" href="classipc_1_1session_1_1shm_1_1classic_1_1Session__server.html">ipc::session::shm::classic::Session_server</a>&lt; S_MQ_TYPE_OR_NONE, S_TRANSMIT_NATIVE_HANDLES, Mdt_payload &gt;::Mutex =  flow::util::Mutex_non_recursive</td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">private</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p>Short-hand for <a class="el" href="classipc_1_1session_1_1shm_1_1classic_1_1Session__server.html#aac8485479a47f222c36d683a7d5d5f47" title="Protects m_app_shm_by_name and m_shm_pool_names.">m_app_shm_mutex</a> type. </p>

<p class="definition">Definition at line <a class="el" href="ipc__shm_2src_2ipc_2session_2shm_2classic_2session__server_8hpp_source.html#l00378">378</a> of file <a class="el" href="ipc__shm_2src_2ipc_2session_2shm_2classic_2session__server_8hpp_source.html">session_server.hpp</a>.</p>

</div>
</div>
<a id="a2330c13a2c20303d4be4adfe4c74b2b9" name="a2330c13a2c20303d4be4adfe4c74b2b9"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a2330c13a2c20303d4be4adfe4c74b2b9">&#9670;&nbsp;</a></span>Server_session_obj</h2>

<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;schema::MqType S_MQ_TYPE_OR_NONE, bool S_TRANSMIT_NATIVE_HANDLES, typename Mdt_payload &gt; </div>
      <table class="memname">
        <tr>
          <td class="memname">using <a class="el" href="classipc_1_1session_1_1shm_1_1classic_1_1Session__server.html">ipc::session::shm::classic::Session_server</a>&lt; S_MQ_TYPE_OR_NONE, S_TRANSMIT_NATIVE_HANDLES, Mdt_payload &gt;::Server_session_obj =  <a class="el" href="classipc_1_1session_1_1shm_1_1classic_1_1Server__session.html">shm::classic::Server_session</a>&lt;S_MQ_TYPE_OR_NONE, S_TRANSMIT_NATIVE_HANDLES, Mdt_payload&gt;</td>
        </tr>
      </table>
</div><div class="memdoc">

<p>Short-hand for the concrete <code><a class="el" href="classipc_1_1session_1_1shm_1_1classic_1_1Server__session.html" title="Identical to session::Server_session in every way, except that it makes available two SHM arenas,...">Server_session</a></code>-like type emitted by <a class="el" href="classipc_1_1session_1_1shm_1_1classic_1_1Session__server.html#ac6733bac776ecd2995f41cb0feb81d63" title="Contract identical to simpler session::Session_server::async_accept() overload; but internally ensure...">async_accept()</a>. </p>

<p class="definition">Definition at line <a class="el" href="ipc__shm_2src_2ipc_2session_2shm_2classic_2session__server_8hpp_source.html#l00087">87</a> of file <a class="el" href="ipc__shm_2src_2ipc_2session_2shm_2classic_2session__server_8hpp_source.html">session_server.hpp</a>.</p>

</div>
</div>
<a id="a2f814f83d98f8841f9dc01c7d8594bb2" name="a2f814f83d98f8841f9dc01c7d8594bb2"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a2f814f83d98f8841f9dc01c7d8594bb2">&#9670;&nbsp;</a></span>Structured_msg_builder_config</h2>

<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;schema::MqType S_MQ_TYPE_OR_NONE, bool S_TRANSMIT_NATIVE_HANDLES, typename Mdt_payload &gt; </div>
      <table class="memname">
        <tr>
          <td class="memname">using <a class="el" href="classipc_1_1session_1_1shm_1_1classic_1_1Session__server.html">ipc::session::shm::classic::Session_server</a>&lt; S_MQ_TYPE_OR_NONE, S_TRANSMIT_NATIVE_HANDLES, Mdt_payload &gt;::Structured_msg_builder_config =  typename <a class="el" href="classipc_1_1session_1_1shm_1_1classic_1_1Session__mv.html#a23d60bbc945c72cd6f19fdadd7ce014d">Server_session_obj::Base::Structured_msg_builder_config</a></td>
        </tr>
      </table>
</div><div class="memdoc">

<p>Short-hand for <a class="el" href="classipc_1_1session_1_1shm_1_1classic_1_1Session__mv.html#a23d60bbc945c72cd6f19fdadd7ce014d" title="Implements Session API per contract.">shm::classic::Session_mv::Structured_msg_builder_config</a>. </p>

<p class="definition">Definition at line <a class="el" href="ipc__shm_2src_2ipc_2session_2shm_2classic_2session__server_8hpp_source.html#l00102">102</a> of file <a class="el" href="ipc__shm_2src_2ipc_2session_2shm_2classic_2session__server_8hpp_source.html">session_server.hpp</a>.</p>

</div>
</div>
<a id="a9b709f4510613328942335b4ba5fb49d" name="a9b709f4510613328942335b4ba5fb49d"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a9b709f4510613328942335b4ba5fb49d">&#9670;&nbsp;</a></span>Structured_msg_reader_config</h2>

<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;schema::MqType S_MQ_TYPE_OR_NONE, bool S_TRANSMIT_NATIVE_HANDLES, typename Mdt_payload &gt; </div>
      <table class="memname">
        <tr>
          <td class="memname">using <a class="el" href="classipc_1_1session_1_1shm_1_1classic_1_1Session__server.html">ipc::session::shm::classic::Session_server</a>&lt; S_MQ_TYPE_OR_NONE, S_TRANSMIT_NATIVE_HANDLES, Mdt_payload &gt;::Structured_msg_reader_config =  typename <a class="el" href="classipc_1_1session_1_1shm_1_1classic_1_1Session__mv.html#a2b27e91465c5dbdefcb12a6913a9ad4c">Server_session_obj::Base::Structured_msg_reader_config</a></td>
        </tr>
      </table>
</div><div class="memdoc">

<p>Short-hand for <a class="el" href="classipc_1_1session_1_1shm_1_1classic_1_1Session__mv.html#a2b27e91465c5dbdefcb12a6913a9ad4c" title="Implements Session API per contract.">shm::classic::Session_mv::Structured_msg_reader_config</a>. </p>

<p class="definition">Definition at line <a class="el" href="ipc__shm_2src_2ipc_2session_2shm_2classic_2session__server_8hpp_source.html#l00105">105</a> of file <a class="el" href="ipc__shm_2src_2ipc_2session_2shm_2classic_2session__server_8hpp_source.html">session_server.hpp</a>.</p>

</div>
</div>
<h2 class="groupheader">Constructor &amp; Destructor Documentation</h2>
<a id="af10bb97219c59c34fce50be09eaacf0c" name="af10bb97219c59c34fce50be09eaacf0c"></a>
<h2 class="memtitle"><span class="permalink"><a href="#af10bb97219c59c34fce50be09eaacf0c">&#9670;&nbsp;</a></span>Session_server()</h2>

<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;schema::MqType S_MQ_TYPE_OR_NONE, bool S_TRANSMIT_NATIVE_HANDLES, typename Mdt_payload &gt; </div>
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname"><a class="el" href="classipc_1_1session_1_1shm_1_1classic_1_1Session__server.html">ipc::session::shm::classic::Session_server</a>&lt; S_MQ_TYPE_OR_NONE, S_TRANSMIT_NATIVE_HANDLES, Mdt_payload &gt;::Session_server </td>
          <td>(</td>
          <td class="paramtype">flow::log::Logger *&#160;</td>
          <td class="paramname"><em>logger_ptr</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const <a class="el" href="structipc_1_1session_1_1Server__app.html">Server_app</a> &amp;&#160;</td>
          <td class="paramname"><em>srv_app_ref</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const <a class="el" href="structipc_1_1session_1_1Client__app.html#add718cbf6aa1d2abb26fbadcc974a7bd">Client_app::Master_set</a> &amp;&#160;</td>
          <td class="paramname"><em>cli_app_master_set_ref</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype"><a class="el" href="namespaceipc.html#aa3192e586cc45d3e7c22463bf2760f89">Error_code</a> *&#160;</td>
          <td class="paramname"><em>err_code</em> = <code>0</code>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">explicit</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p>Constructor: identical to <a class="el" href="classipc_1_1session_1_1Session__server.html" title="To be instantiated typically once in a given process, an object of this type asynchronously listens f...">session::Session_server</a> ctor. </p>
<p >See its doc header. Consider also <a class="el" href="classipc_1_1session_1_1shm_1_1classic_1_1Session__server.html#af6472e74db4dee7cf5ce5be55ded4179" title="The pool-size value, in mebibytes, which will be used to size the pool in subsequent async_accept()s.">pool_size_limit_mi()</a> mutator (though if there are no problems in practice, then you can leave it alone).</p>
<dl class="params"><dt>Parameters</dt><dd>
  <table class="params">
    <tr><td class="paramname">logger_ptr</td><td>See above. </td></tr>
    <tr><td class="paramname">srv_app_ref</td><td>See above. </td></tr>
    <tr><td class="paramname">cli_app_master_set_ref</td><td>See above. </td></tr>
    <tr><td class="paramname">err_code</td><td>See above. </td></tr>
  </table>
  </dd>
</dl>

<p class="definition">Definition at line <a class="el" href="ipc__shm_2src_2ipc_2session_2shm_2classic_2session__server_8hpp_source.html#l00455">455</a> of file <a class="el" href="ipc__shm_2src_2ipc_2session_2shm_2classic_2session__server_8hpp_source.html">session_server.hpp</a>.</p>

<p class="reference">References <a class="el" href="ipc__shm_2src_2ipc_2session_2shm_2classic_2session__server_8hpp_source.html#l00531">ipc::session::shm::classic::Session_server&lt; S_MQ_TYPE_OR_NONE, S_TRANSMIT_NATIVE_HANDLES, Mdt_payload &gt;::init_app_shm_as_needed()</a>.</p>
<div class="dynheader">
Here is the call graph for this function:</div>
<div class="dyncontent">
<div class="center"><iframe scrolling="no" frameborder="0" src="classipc_1_1session_1_1shm_1_1classic_1_1Session__server_af10bb97219c59c34fce50be09eaacf0c_cgraph.svg" width="984" height="194"><p><b>This browser is not able to show SVG: try Firefox, Chrome, Safari, or Opera instead.</b></p></iframe>
</div>
</div>

</div>
</div>
<a id="ac5246e4ce9df15b963ccde81715473c0" name="ac5246e4ce9df15b963ccde81715473c0"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ac5246e4ce9df15b963ccde81715473c0">&#9670;&nbsp;</a></span>~Session_server()</h2>

<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;schema::MqType S_MQ_TYPE_OR_NONE, bool S_TRANSMIT_NATIVE_HANDLES, typename Mdt_payload &gt; </div>
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname"><a class="el" href="classipc_1_1session_1_1shm_1_1classic_1_1Session__server.html">ipc::session::shm::classic::Session_server</a>&lt; S_MQ_TYPE_OR_NONE, S_TRANSMIT_NATIVE_HANDLES, Mdt_payload &gt;::~<a class="el" href="classipc_1_1session_1_1shm_1_1classic_1_1Session__server.html">Session_server</a> </td>
          <td>(</td>
          <td class="paramname"></td><td>)</td>
          <td></td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">default</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p>Destructor: contract is identical to <a class="el" href="classipc_1_1session_1_1Session__server.html" title="To be instantiated typically once in a given process, an object of this type asynchronously listens f...">session::Session_server</a> dtor. </p>
<p >In particular this dtor shall perform <a class="el" href="classipc_1_1shm_1_1classic_1_1Pool__arena.html#a9487dcff44fde9a2c12d64b51c16c85e" title="Removes the named SHM pool object.">shm::classic::Pool_arena::remove_persistent()</a> on <em>each</em> pool returnable by <a class="el" href="classipc_1_1session_1_1shm_1_1classic_1_1Session__server.html#ae3e011716068f4e669bd7eed487cf207" title="Returns pointer to the per-app SHM-arena, whose lifetime extends until *this is destroyed; or null if...">app_shm()</a> (the per-Client_app pools). Reminder: like all kernel-persistent <code>remove_persistent()</code> methods this will not necessarily free the RAM held on behalf of a given pool; any currently opened <code>Pool_arena</code>s &ndash; presumably ones still (possibly) held by counterpart <code><a class="el" href="classipc_1_1session_1_1shm_1_1classic_1_1Client__session__impl.html" title="Core internally-used implementation of shm::classic::Client_session: it is to the latter what its pub...">shm::classic::Client_session_impl</a></code>s &ndash; will continue to function fine.</p>
<h3>Rationale for aforementioned <code>remove_persistent()</code> op</h3>
<p >Why do it? Answer: Naturally this should be freed sometime; otherwise the RAM will leak, even though the session pertaining to the per-session pool is gone.</p>
<p >Why not do it earlier? Answer: It would be nice to do it super-early... like, say, just after creating the pool during the async portion of <a class="el" href="classipc_1_1session_1_1shm_1_1classic_1_1Session__server.html#ac6733bac776ecd2995f41cb0feb81d63" title="Contract identical to simpler session::Session_server::async_accept() overload; but internally ensure...">async_accept()</a>, namely in <a class="el" href="classipc_1_1session_1_1shm_1_1classic_1_1Session__server.html#a406e3860e68d2e863e64215aae43812e" title="Implementation of our per_app_setup_func() customization point used in the ctor impl: invoked from an...">init_app_shm_as_needed()</a>. The only reason <em>not</em> to do it is if a client handle (<code>Pool_arena</code>) to the pool has not yet had a chance to get opened by the name deleted via <code>remove_persistent()</code>. But this can occur an indefinite number of times after <a class="el" href="classipc_1_1session_1_1shm_1_1classic_1_1Session__server.html#a406e3860e68d2e863e64215aae43812e" title="Implementation of our per_app_setup_func() customization point used in the ctor impl: invoked from an...">init_app_shm_as_needed()</a> creates the pool: the whole idea is the pool is shared between different sessions with the same (by value equality) <a class="el" href="structipc_1_1session_1_1Client__app.html" title="An App that is used as a client in at least one client-server IPC split.">Client_app</a>, across different client processes in fact.</p>
<p >Hence we postpone it until this dtor, at which point all the sessions are definitely done-for.</p>
<p >Why not do it later? Answer: Session-server is done-for, if we are being invoked; the counterpart <code>Client_session</code>s could not possibly hope to open the pool now, even if they somehow wanted to do so. So why wait?</p>
<h3>What if this dtor never runs?</h3>
<p >In any program that exits without aborting abruptly, it <em>will</em> run &ndash; either proactively during user program de-init code or implicity when it exits.</p>
<p >It however may not run due to abrupt termination (a crash). In that case the <code><a class="el" href="classipc_1_1session_1_1shm_1_1classic_1_1Session__server.html#ae3e011716068f4e669bd7eed487cf207" title="Returns pointer to the per-app SHM-arena, whose lifetime extends until *this is destroyed; or null if...">app_shm()</a></code> pools will indeed leak, in that this dtor won't execute, so the <code>remove_persistent()</code>s will not occur in that fashion. The <a class="el" href="classipc_1_1session_1_1shm_1_1classic_1_1Session__server.html" title="This is to vanilla Session_server what shm::classic::Server_session is to vanilla Server_session: it ...">shm::classic::Session_server</a> has a contingency for this, which we don't describe here, wherein it has <em>cleanup points</em> at which it cleans up anything thus leaked during previous invocations of the same <a class="el" href="structipc_1_1session_1_1Server__app.html" title="An App that is used as a server in at least one client-server IPC split.">Server_app</a>.</p>
<h3>What about the per-session pools?</h3>
<p >The above talks only of the <a class="el" href="classipc_1_1session_1_1shm_1_1classic_1_1Session__server.html#ae3e011716068f4e669bd7eed487cf207" title="Returns pointer to the per-app SHM-arena, whose lifetime extends until *this is destroyed; or null if...">app_shm()</a>-returned pools; what about <a class="el" href="classipc_1_1session_1_1shm_1_1classic_1_1Session__impl.html#a0bb9a7c360c4c55af64bfd84f1b365da" title="See shm::classic::Session_mv counterpart.">shm::classic::Session_impl::session_shm()</a>? Shouldn't we clean it up here? Answer: Well, we could, but since it's a per-session thing, each shm::classic::Session_server_impl takes care of its own <code>session_shm()</code>. </p>

</div>
</div>
<h2 class="groupheader">Member Function Documentation</h2>
<a id="ae3e011716068f4e669bd7eed487cf207" name="ae3e011716068f4e669bd7eed487cf207"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ae3e011716068f4e669bd7eed487cf207">&#9670;&nbsp;</a></span>app_shm()</h2>

<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;schema::MqType S_MQ_TYPE_OR_NONE, bool S_TRANSMIT_NATIVE_HANDLES, typename Mdt_payload &gt; </div>
      <table class="memname">
        <tr>
          <td class="memname"><a class="el" href="classipc_1_1session_1_1shm_1_1classic_1_1Session__server.html">Session_server</a>&lt; S_MQ_TYPE_OR_NONE, S_TRANSMIT_NATIVE_HANDLES, Mdt_payload &gt;<a class="el" href="classipc_1_1session_1_1shm_1_1classic_1_1Session__server.html#ae4d637a7d4082c639b7ef7654cc616f3">::Arena</a> * <a class="el" href="classipc_1_1session_1_1shm_1_1classic_1_1Session__server.html">ipc::session::shm::classic::Session_server</a>&lt; S_MQ_TYPE_OR_NONE, S_TRANSMIT_NATIVE_HANDLES, Mdt_payload &gt;::app_shm </td>
          <td>(</td>
          <td class="paramtype">const <a class="el" href="structipc_1_1session_1_1Client__app.html">Client_app</a> &amp;&#160;</td>
          <td class="paramname"><em>app</em></td><td>)</td>
          <td></td>
        </tr>
      </table>
</div><div class="memdoc">

<p>Returns pointer to the per-<code>app</code> SHM-arena, whose lifetime extends until <code>*this</code> is destroyed; or null if the given <a class="el" href="structipc_1_1session_1_1Client__app.html" title="An App that is used as a client in at least one client-server IPC split.">Client_app</a> has not yet opened at least 1 <a class="el" href="classipc_1_1session_1_1shm_1_1classic_1_1Server__session.html" title="Identical to session::Server_session in every way, except that it makes available two SHM arenas,...">shm::classic::Server_session</a> via <a class="el" href="classipc_1_1session_1_1shm_1_1classic_1_1Session__server.html#ac6733bac776ecd2995f41cb0feb81d63" title="Contract identical to simpler session::Session_server::async_accept() overload; but internally ensure...">async_accept()</a>. </p>
<p >Alternatively you may use <a class="el" href="classipc_1_1session_1_1shm_1_1classic_1_1Session__mv.html#ac6a4f1fbafb583f37d7586c6a199430f" title="Returns SHM Arena with per-app scope, meaning its pool shall be accessible potentially beyond the lif...">shm::classic::Session_mv::app_shm()</a> off any session object filled-out by <code>*this</code> <a class="el" href="classipc_1_1session_1_1shm_1_1classic_1_1Session__server.html#ac6733bac776ecd2995f41cb0feb81d63" title="Contract identical to simpler session::Session_server::async_accept() overload; but internally ensure...">async_accept()</a>, as long as its <a class="el" href="classipc_1_1session_1_1Server__session__mv.html#ac873543383b7a6da94d4353231f34ec2" title="The opposing application is described by a Client_app; this is that description.">Server_session_mv::client_app()</a> equals <code>app</code> (by <a class="el" href="structipc_1_1session_1_1App.html#a8e67b57829fe43a122a23c699b5de8fd" title="Brief application name, readable to humans and unique across all other applications&#39; names; used both...">App::m_name</a> equality).</p>
<p >If non-null is returned, then the same pointer value shall be returned for all subsequent calls with the same (by <a class="el" href="structipc_1_1session_1_1App.html#a8e67b57829fe43a122a23c699b5de8fd" title="Brief application name, readable to humans and unique across all other applications&#39; names; used both...">App::m_name</a> equality) <code>app</code>. The non-null pointers returned for any 2 calls, where <code>app</code> is different (by <a class="el" href="structipc_1_1session_1_1App.html#a8e67b57829fe43a122a23c699b5de8fd" title="Brief application name, readable to humans and unique across all other applications&#39; names; used both...">App::m_name</a> equality) among them, shall always differ.</p>
<p >See <a class="el" href="classipc_1_1session_1_1shm_1_1classic_1_1Session__mv.html#a07c9b1803567c2714ae48433e756047f" title="The arena object on which one may call construct&lt;T&gt;(ctor_args...), where ctor_args are arguments to t...">shm::classic::Session_mv::Arena</a> doc header for useful instructions on working with <a class="el" href="classipc_1_1session_1_1shm_1_1classic_1_1Session__server.html#ae4d637a7d4082c639b7ef7654cc616f3" title="Short-hand for shm::classic::Session_mv::Arena. See app_shm() in particular.">Arena</a>, <code>lend_object()</code>, and <code>borrow_object()</code>.</p>
<h3>Perf</h3>
<p >Given the choice between Server_session_mv::app_shm() and the present method, the latter is somewhat slower; internally it involves a mutex-protected map lookup, while the former simply returns a cached pointer as of this writing.</p>
<p >Generally it is also quite fast for the user to save any non-null value returned by either <code><a class="el" href="classipc_1_1session_1_1shm_1_1classic_1_1Session__server.html#ae3e011716068f4e669bd7eed487cf207" title="Returns pointer to the per-app SHM-arena, whose lifetime extends until *this is destroyed; or null if...">app_shm()</a></code>; the pointer returned shall always be the same after all.</p>
<h3>Thread safety</h3>
<p >For internal use, namely by <a class="el" href="classipc_1_1session_1_1shm_1_1classic_1_1Server__session__impl.html#a9c78b2c35b853e1702a06ec451545945" title="For use by internal user Session_server: See Server_session_mv counterpart.">shm::classic::Server_session_impl::async_accept_log_in()</a> at least, it is guaranteed the <a class="el" href="classipc_1_1session_1_1shm_1_1classic_1_1Session__server.html#ae3e011716068f4e669bd7eed487cf207" title="Returns pointer to the per-app SHM-arena, whose lifetime extends until *this is destroyed; or null if...">app_shm()</a> may be called on the same <code>*this</code> concurrently to itself and <a class="el" href="classipc_1_1session_1_1shm_1_1classic_1_1Session__server.html#a406e3860e68d2e863e64215aae43812e" title="Implementation of our per_app_setup_func() customization point used in the ctor impl: invoked from an...">init_app_shm_as_needed()</a>. Formally speaking this isn't publicly documented, as I (ygoldfel) didn't want to get users into any bad habit, but internally it does have this property &ndash; as it is required. </p>
<dl class="params"><dt>Parameters</dt><dd>
  <table class="params">
    <tr><td class="paramname">app</td><td><a class="el" href="structipc_1_1session_1_1Client__app.html" title="An App that is used as a client in at least one client-server IPC split.">Client_app</a> whose segregated SHM-arena to return, if a session for a client of the app has been opened prior to this call. </td></tr>
  </table>
  </dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>Pointer to <code>*this</code>-held per-<code>app</code> SHM-arena, if it has been created; null otherwise. See above. </dd></dl>

<p class="definition">Definition at line <a class="el" href="ipc__shm_2src_2ipc_2session_2shm_2classic_2session__server_8hpp_source.html#l00618">618</a> of file <a class="el" href="ipc__shm_2src_2ipc_2session_2shm_2classic_2session__server_8hpp_source.html">session_server.hpp</a>.</p>

<p class="reference">References <a class="el" href="app_8hpp_source.html#l00144">ipc::session::App::m_name</a>.</p>

</div>
</div>
<a id="ad0dafea47293d23e079b6b5c5c6a9cef" name="ad0dafea47293d23e079b6b5c5c6a9cef"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ad0dafea47293d23e079b6b5c5c6a9cef">&#9670;&nbsp;</a></span>app_shm_builder_config()</h2>

<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;schema::MqType S_MQ_TYPE_OR_NONE, bool S_TRANSMIT_NATIVE_HANDLES, typename Mdt_payload &gt; </div>
      <table class="memname">
        <tr>
          <td class="memname"><a class="el" href="classipc_1_1session_1_1shm_1_1classic_1_1Session__server.html">Session_server</a>&lt; S_MQ_TYPE_OR_NONE, S_TRANSMIT_NATIVE_HANDLES, Mdt_payload &gt;<a class="el" href="classipc_1_1session_1_1shm_1_1classic_1_1Session__server.html#a2f814f83d98f8841f9dc01c7d8594bb2">::Structured_msg_builder_config</a> <a class="el" href="classipc_1_1session_1_1shm_1_1classic_1_1Session__server.html">ipc::session::shm::classic::Session_server</a>&lt; S_MQ_TYPE_OR_NONE, S_TRANSMIT_NATIVE_HANDLES, Mdt_payload &gt;::app_shm_builder_config </td>
          <td>(</td>
          <td class="paramtype">const <a class="el" href="structipc_1_1session_1_1Client__app.html">Client_app</a> &amp;&#160;</td>
          <td class="paramname"><em>app</em></td><td>)</td>
          <td></td>
        </tr>
      </table>
</div><div class="memdoc">

<p>Returns builder config suitable for capnp-serializing out-messages in SHM arena <a class="el" href="classipc_1_1session_1_1shm_1_1classic_1_1Session__server.html#ae3e011716068f4e669bd7eed487cf207" title="Returns pointer to the per-app SHM-arena, whose lifetime extends until *this is destroyed; or null if...">app_shm()</a> for the same <code><a class="el" href="structipc_1_1session_1_1Client__app.html" title="An App that is used as a client in at least one client-server IPC split.">Client_app</a> app</code>. </p>
<p >Alternatively you may use <a class="el" href="classipc_1_1session_1_1shm_1_1classic_1_1Session__mv.html#a0fbea0563835e852069cdaab506dd92c" title="Identical to session_shm_builder_config() but backed by SHM arena app_shm() instead of session_shm().">shm::classic::Session_mv::app_shm_builder_config()</a> off any session object filled-out by <code>*this</code> <a class="el" href="classipc_1_1session_1_1shm_1_1classic_1_1Session__server.html#ac6733bac776ecd2995f41cb0feb81d63" title="Contract identical to simpler session::Session_server::async_accept() overload; but internally ensure...">async_accept()</a>, as long as its <a class="el" href="classipc_1_1session_1_1Server__session__mv.html#ac873543383b7a6da94d4353231f34ec2" title="The opposing application is described by a Client_app; this is that description.">Server_session_mv::client_app()</a> equals <code>app</code> (by <a class="el" href="structipc_1_1session_1_1App.html#a8e67b57829fe43a122a23c699b5de8fd" title="Brief application name, readable to humans and unique across all other applications&#39; names; used both...">App::m_name</a> equality).</p>
<p >Unlike <a class="el" href="classipc_1_1session_1_1shm_1_1classic_1_1Session__server.html#ae3e011716068f4e669bd7eed487cf207" title="Returns pointer to the per-app SHM-arena, whose lifetime extends until *this is destroyed; or null if...">app_shm()</a> this method does not allow the case where <code>app_shm(app)</code> would have returned null. In that case the present method yields undefined behavior (assertion may trip).</p>
<h3>Perf</h3>
<p >Given the choice between Server_session_mv::app_shm_builder_config() and the present method, the latter is somewhat slower (reason: same as listed in <a class="el" href="classipc_1_1session_1_1shm_1_1classic_1_1Session__server.html#ae3e011716068f4e669bd7eed487cf207" title="Returns pointer to the per-app SHM-arena, whose lifetime extends until *this is destroyed; or null if...">app_shm()</a> doc header).</p>
<p >Generally it is also quite fast for the user to save any value returned by either <code><a class="el" href="classipc_1_1session_1_1shm_1_1classic_1_1Session__server.html#ad0dafea47293d23e079b6b5c5c6a9cef" title="Returns builder config suitable for capnp-serializing out-messages in SHM arena app_shm() for the sam...">app_shm_builder_config()</a></code>, as an equal-by-value <code>Config</code> object shall be returned for the same (by <a class="el" href="structipc_1_1session_1_1App.html#a8e67b57829fe43a122a23c699b5de8fd" title="Brief application name, readable to humans and unique across all other applications&#39; names; used both...">App::m_name</a> equality) <code>app</code>.</p>
<dl class="params"><dt>Parameters</dt><dd>
  <table class="params">
    <tr><td class="paramname">app</td><td>See <a class="el" href="classipc_1_1session_1_1shm_1_1classic_1_1Session__server.html#ae3e011716068f4e669bd7eed487cf207" title="Returns pointer to the per-app SHM-arena, whose lifetime extends until *this is destroyed; or null if...">app_shm()</a>. </td></tr>
  </table>
  </dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>See above. </dd></dl>

<p class="definition">Definition at line <a class="el" href="ipc__shm_2src_2ipc_2session_2shm_2classic_2session__server_8hpp_source.html#l00634">634</a> of file <a class="el" href="ipc__shm_2src_2ipc_2session_2shm_2classic_2session__server_8hpp_source.html">session_server.hpp</a>.</p>

</div>
</div>
<a id="a4bfebd1e36c1b2924b6f84294f7cb10c" name="a4bfebd1e36c1b2924b6f84294f7cb10c"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a4bfebd1e36c1b2924b6f84294f7cb10c">&#9670;&nbsp;</a></span>app_shm_lender_session()</h2>

<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;schema::MqType S_MQ_TYPE_OR_NONE, bool S_TRANSMIT_NATIVE_HANDLES, typename Mdt_payload &gt; </div>
      <table class="memname">
        <tr>
          <td class="memname"><a class="el" href="classipc_1_1session_1_1shm_1_1classic_1_1Session__server.html">Session_server</a>&lt; S_MQ_TYPE_OR_NONE, S_TRANSMIT_NATIVE_HANDLES, Mdt_payload &gt;::Structured_msg_builder_config::Builder::Session <a class="el" href="classipc_1_1session_1_1shm_1_1classic_1_1Session__server.html">ipc::session::shm::classic::Session_server</a>&lt; S_MQ_TYPE_OR_NONE, S_TRANSMIT_NATIVE_HANDLES, Mdt_payload &gt;::app_shm_lender_session </td>
          <td>(</td>
          <td class="paramtype">const <a class="el" href="structipc_1_1session_1_1Client__app.html">Client_app</a> &amp;&#160;</td>
          <td class="paramname"><em>app</em></td><td>)</td>
          <td></td>
        </tr>
      </table>
</div><div class="memdoc">

<p>In short, what <a class="el" href="classipc_1_1session_1_1shm_1_1classic_1_1Session__server.html#ad0dafea47293d23e079b6b5c5c6a9cef" title="Returns builder config suitable for capnp-serializing out-messages in SHM arena app_shm() for the sam...">app_shm_builder_config()</a> is to <a class="el" href="classipc_1_1session_1_1shm_1_1classic_1_1Session__mv.html#a0fbea0563835e852069cdaab506dd92c" title="Identical to session_shm_builder_config() but backed by SHM arena app_shm() instead of session_shm().">shm::classic::Session_mv::app_shm_builder_config()</a>, this is to <a class="el" href="classipc_1_1session_1_1shm_1_1classic_1_1Session__mv.html#a0b7540b33fcedeaba37a3fece1bdec7a" title="When transmitting items originating in Arena app_shm() via transport::struc::shm::Builder::emit_seria...">shm::classic::Session_mv::app_shm_lender_session()</a>. </p>
<p >Notes in <a class="el" href="classipc_1_1session_1_1shm_1_1classic_1_1Session__server.html#ad0dafea47293d23e079b6b5c5c6a9cef" title="Returns builder config suitable for capnp-serializing out-messages in SHM arena app_shm() for the sam...">app_shm_builder_config()</a> doc header apply here.</p>
<dl class="params"><dt>Parameters</dt><dd>
  <table class="params">
    <tr><td class="paramname">app</td><td>See <a class="el" href="classipc_1_1session_1_1shm_1_1classic_1_1Session__server.html#ae3e011716068f4e669bd7eed487cf207" title="Returns pointer to the per-app SHM-arena, whose lifetime extends until *this is destroyed; or null if...">app_shm()</a>. </td></tr>
  </table>
  </dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>See above. </dd></dl>

<p class="definition">Definition at line <a class="el" href="ipc__shm_2src_2ipc_2session_2shm_2classic_2session__server_8hpp_source.html#l00644">644</a> of file <a class="el" href="ipc__shm_2src_2ipc_2session_2shm_2classic_2session__server_8hpp_source.html">session_server.hpp</a>.</p>

</div>
</div>
<a id="ac87840d13847fca013ef3f64de8dbcce" name="ac87840d13847fca013ef3f64de8dbcce"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ac87840d13847fca013ef3f64de8dbcce">&#9670;&nbsp;</a></span>app_shm_reader_config()</h2>

<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;schema::MqType S_MQ_TYPE_OR_NONE, bool S_TRANSMIT_NATIVE_HANDLES, typename Mdt_payload &gt; </div>
      <table class="memname">
        <tr>
          <td class="memname"><a class="el" href="classipc_1_1session_1_1shm_1_1classic_1_1Session__server.html">Session_server</a>&lt; S_MQ_TYPE_OR_NONE, S_TRANSMIT_NATIVE_HANDLES, Mdt_payload &gt;<a class="el" href="classipc_1_1session_1_1shm_1_1classic_1_1Session__server.html#a9b709f4510613328942335b4ba5fb49d">::Structured_msg_reader_config</a> <a class="el" href="classipc_1_1session_1_1shm_1_1classic_1_1Session__server.html">ipc::session::shm::classic::Session_server</a>&lt; S_MQ_TYPE_OR_NONE, S_TRANSMIT_NATIVE_HANDLES, Mdt_payload &gt;::app_shm_reader_config </td>
          <td>(</td>
          <td class="paramtype">const <a class="el" href="structipc_1_1session_1_1Client__app.html">Client_app</a> &amp;&#160;</td>
          <td class="paramname"><em>app</em></td><td>)</td>
          <td></td>
        </tr>
      </table>
</div><div class="memdoc">

<p>Returns reader config counterpart to <a class="el" href="classipc_1_1session_1_1shm_1_1classic_1_1Session__server.html#ad0dafea47293d23e079b6b5c5c6a9cef" title="Returns builder config suitable for capnp-serializing out-messages in SHM arena app_shm() for the sam...">app_shm_builder_config()</a> for a given <code><a class="el" href="structipc_1_1session_1_1Client__app.html" title="An App that is used as a client in at least one client-server IPC split.">Client_app</a> app</code>. </p>
<dl class="params"><dt>Parameters</dt><dd>
  <table class="params">
    <tr><td class="paramname">app</td><td>See <a class="el" href="classipc_1_1session_1_1shm_1_1classic_1_1Session__server.html#ae3e011716068f4e669bd7eed487cf207" title="Returns pointer to the per-app SHM-arena, whose lifetime extends until *this is destroyed; or null if...">app_shm()</a>. </td></tr>
  </table>
  </dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>See above. </dd></dl>

<p class="definition">Definition at line <a class="el" href="ipc__shm_2src_2ipc_2session_2shm_2classic_2session__server_8hpp_source.html#l00654">654</a> of file <a class="el" href="ipc__shm_2src_2ipc_2session_2shm_2classic_2session__server_8hpp_source.html">session_server.hpp</a>.</p>

</div>
</div>
<a id="ab77874720a5b252df5b1d6faf5d29bb5" name="ab77874720a5b252df5b1d6faf5d29bb5"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ab77874720a5b252df5b1d6faf5d29bb5">&#9670;&nbsp;</a></span>async_accept() <span class="overload">[1/2]</span></h2>

<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;schema::MqType S_MQ_TYPE_OR_NONE, bool S_TRANSMIT_NATIVE_HANDLES, typename Mdt_payload &gt; </div>
<div class="memtemplate">
template&lt;typename Task_err , typename N_init_channels_by_srv_req_func , typename Mdt_load_func &gt; </div>
      <table class="memname">
        <tr>
          <td class="memname">void <a class="el" href="classipc_1_1session_1_1shm_1_1classic_1_1Session__server.html">ipc::session::shm::classic::Session_server</a>&lt; S_MQ_TYPE_OR_NONE, S_TRANSMIT_NATIVE_HANDLES, Mdt_payload &gt;::async_accept </td>
          <td>(</td>
          <td class="paramtype"><a class="el" href="classipc_1_1session_1_1shm_1_1classic_1_1Session__server.html#a2330c13a2c20303d4be4adfe4c74b2b9">Server_session_obj</a> *&#160;</td>
          <td class="paramname"><em>target_session</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype"><a class="el" href="classipc_1_1session_1_1shm_1_1classic_1_1Session__server.html#ab8f638542f33b5028e1db7ce7572fef3">Channels</a> *&#160;</td>
          <td class="paramname"><em>init_channels_by_srv_req</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype"><a class="el" href="classipc_1_1session_1_1shm_1_1classic_1_1Session__server.html#aff4a736c67698d14a538276912e6101d">Mdt_reader_ptr</a> *&#160;</td>
          <td class="paramname"><em>mdt_from_cli_or_null</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype"><a class="el" href="classipc_1_1session_1_1shm_1_1classic_1_1Session__server.html#ab8f638542f33b5028e1db7ce7572fef3">Channels</a> *&#160;</td>
          <td class="paramname"><em>init_channels_by_cli_req</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">N_init_channels_by_srv_req_func &amp;&amp;&#160;</td>
          <td class="paramname"><em>n_init_channels_by_srv_req_func</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">Mdt_load_func &amp;&amp;&#160;</td>
          <td class="paramname"><em>mdt_load_func</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">Task_err &amp;&amp;&#160;</td>
          <td class="paramname"><em>on_done_func</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
</div><div class="memdoc">

<p>Contract identical to advanced <a class="el" href="classipc_1_1session_1_1Session__server.html#a13887cd64912bb5f5675e2817ff8435f" title="Asynchronously awaits for an opposing Client_session to request session establishment and calls on_do...">session::Session_server::async_accept()</a> overload; but internally ensures that the appropriate SHM-classic arenas are available for use in the emitted <a class="el" href="classipc_1_1session_1_1shm_1_1classic_1_1Session__server.html#a2330c13a2c20303d4be4adfe4c74b2b9" title="Short-hand for the concrete Server_session-like type emitted by async_accept().">Server_session_obj</a>. </p>
<p >See doc header for <a class="el" href="classipc_1_1session_1_1Session__server.html#a13887cd64912bb5f5675e2817ff8435f" title="Asynchronously awaits for an opposing Client_session to request session establishment and calls on_do...">session::Session_server::async_accept()</a> advanced overload.</p>
<p >Additional (to those documented for <a class="el" href="classipc_1_1session_1_1Session__server.html#a13887cd64912bb5f5675e2817ff8435f" title="Asynchronously awaits for an opposing Client_session to request session establishment and calls on_do...">session::Session_server::async_accept()</a>) <a class="el" href="namespaceipc.html#aa3192e586cc45d3e7c22463bf2760f89" title="Short-hand for flow::Error_code which is very common.">Error_code</a> generated and passed to <code>on_done_func()</code>: See <a class="el" href="classipc_1_1shm_1_1classic_1_1Pool__arena.html" title="A SHM-classic interface around a single SHM pool with allocation-algorithm services by boost....">shm::classic::Pool_arena</a> ctor doc header. The most likely reason for failure of that code in this context is a permissions issue creating the SHM pool or <code>ENOSPC</code> (Linux at least) a/k/a "No space left on device" if a kernel level for sum of pool sizes has been reached. In this case consider <a class="el" href="classipc_1_1session_1_1shm_1_1classic_1_1Session__server.html#af6472e74db4dee7cf5ce5be55ded4179" title="The pool-size value, in mebibytes, which will be used to size the pool in subsequent async_accept()s.">pool_size_limit_mi()</a> mutator and/or tweaking the kernel parameter.</p>
<dl class="tparams"><dt>Template Parameters</dt><dd>
  <table class="tparams">
    <tr><td class="paramname">Task_err</td><td>See above. </td></tr>
    <tr><td class="paramname">N_init_channels_by_srv_req_func</td><td>See above. </td></tr>
    <tr><td class="paramname">Mdt_load_func</td><td>See above. </td></tr>
  </table>
  </dd>
</dl>
<dl class="params"><dt>Parameters</dt><dd>
  <table class="params">
    <tr><td class="paramname">target_session</td><td>See other <a class="el" href="classipc_1_1session_1_1shm_1_1classic_1_1Session__server.html#ac6733bac776ecd2995f41cb0feb81d63" title="Contract identical to simpler session::Session_server::async_accept() overload; but internally ensure...">async_accept()</a> overload. </td></tr>
    <tr><td class="paramname">init_channels_by_srv_req</td><td>See above. </td></tr>
    <tr><td class="paramname">mdt_from_cli_or_null</td><td>See above. </td></tr>
    <tr><td class="paramname">init_channels_by_cli_req</td><td>See above. </td></tr>
    <tr><td class="paramname">n_init_channels_by_srv_req_func</td><td>See above. </td></tr>
    <tr><td class="paramname">mdt_load_func</td><td>See above. </td></tr>
    <tr><td class="paramname">on_done_func</td><td>See above. </td></tr>
  </table>
  </dd>
</dl>

<p class="definition">Definition at line <a class="el" href="ipc__shm_2src_2ipc_2session_2shm_2classic_2session__server_8hpp_source.html#l00681">681</a> of file <a class="el" href="ipc__shm_2src_2ipc_2session_2shm_2classic_2session__server_8hpp_source.html">session_server.hpp</a>.</p>

</div>
</div>
<a id="ac6733bac776ecd2995f41cb0feb81d63" name="ac6733bac776ecd2995f41cb0feb81d63"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ac6733bac776ecd2995f41cb0feb81d63">&#9670;&nbsp;</a></span>async_accept() <span class="overload">[2/2]</span></h2>

<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;schema::MqType S_MQ_TYPE_OR_NONE, bool S_TRANSMIT_NATIVE_HANDLES, typename Mdt_payload &gt; </div>
<div class="memtemplate">
template&lt;typename Task_err &gt; </div>
      <table class="memname">
        <tr>
          <td class="memname">void <a class="el" href="classipc_1_1session_1_1shm_1_1classic_1_1Session__server.html">ipc::session::shm::classic::Session_server</a>&lt; S_MQ_TYPE_OR_NONE, S_TRANSMIT_NATIVE_HANDLES, Mdt_payload &gt;::async_accept </td>
          <td>(</td>
          <td class="paramtype"><a class="el" href="classipc_1_1session_1_1shm_1_1classic_1_1Session__server.html#a2330c13a2c20303d4be4adfe4c74b2b9">Server_session_obj</a> *&#160;</td>
          <td class="paramname"><em>target_session</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">Task_err &amp;&amp;&#160;</td>
          <td class="paramname"><em>on_done_func</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
</div><div class="memdoc">

<p>Contract identical to simpler <a class="el" href="classipc_1_1session_1_1Session__server.html#a13887cd64912bb5f5675e2817ff8435f" title="Asynchronously awaits for an opposing Client_session to request session establishment and calls on_do...">session::Session_server::async_accept()</a> overload; but internally ensures that the appropriate SHM-classic arenas are available for use in the emitted <a class="el" href="classipc_1_1session_1_1shm_1_1classic_1_1Session__server.html#a2330c13a2c20303d4be4adfe4c74b2b9" title="Short-hand for the concrete Server_session-like type emitted by async_accept().">Server_session_obj</a>. </p>
<p >See doc header for <a class="el" href="classipc_1_1session_1_1Session__server.html#a13887cd64912bb5f5675e2817ff8435f" title="Asynchronously awaits for an opposing Client_session to request session establishment and calls on_do...">session::Session_server::async_accept()</a> simple overload.</p>
<p >Additional (to those documented for <a class="el" href="classipc_1_1session_1_1shm_1_1classic_1_1Session__server.html#ac6733bac776ecd2995f41cb0feb81d63" title="Contract identical to simpler session::Session_server::async_accept() overload; but internally ensure...">Session_server::async_accept()</a>) <a class="el" href="namespaceipc.html#aa3192e586cc45d3e7c22463bf2760f89" title="Short-hand for flow::Error_code which is very common.">Error_code</a> generated and passed to <code>on_done_func()</code>: See <a class="el" href="classipc_1_1shm_1_1classic_1_1Pool__arena.html" title="A SHM-classic interface around a single SHM pool with allocation-algorithm services by boost....">shm::classic::Pool_arena</a> ctor doc header. The most likely reason for failure of that code in this context is a permissions issue creating the SHM pool, or <code>ENOSPC</code> (Linux at least) a/k/a "No space left on device" if a kernel level for sum of pool sizes has been reached. In this case consider <a class="el" href="classipc_1_1session_1_1shm_1_1classic_1_1Session__server.html#af6472e74db4dee7cf5ce5be55ded4179" title="The pool-size value, in mebibytes, which will be used to size the pool in subsequent async_accept()s.">pool_size_limit_mi()</a> mutator and/or tweaking the kernel parameter.</p>
<dl class="tparams"><dt>Template Parameters</dt><dd>
  <table class="tparams">
    <tr><td class="paramname">Task_err</td><td>See above. </td></tr>
  </table>
  </dd>
</dl>
<dl class="params"><dt>Parameters</dt><dd>
  <table class="params">
    <tr><td class="paramname">target_session</td><td>See above. Reminder (though this is enforced at compile-time): the type of <code>*target_session</code> for <a class="el" href="classipc_1_1session_1_1shm_1_1classic_1_1Session__server.html#ac6733bac776ecd2995f41cb0feb81d63" title="Contract identical to simpler session::Session_server::async_accept() overload; but internally ensure...">Session_server::async_accept()</a> is <a class="el" href="namespaceipc_1_1session.html#ab01d5bce0ab2f3435ca9dd88d27609dc" title="A vanilla Server_session with no optional capabilities.">Server_session</a>; whereas here it is <a class="el" href="classipc_1_1session_1_1shm_1_1classic_1_1Server__session.html" title="Identical to session::Server_session in every way, except that it makes available two SHM arenas,...">shm::classic::Server_session</a>. </td></tr>
    <tr><td class="paramname">on_done_func</td><td>See above. </td></tr>
  </table>
  </dd>
</dl>

<p class="definition">Definition at line <a class="el" href="ipc__shm_2src_2ipc_2session_2shm_2classic_2session__server_8hpp_source.html#l00664">664</a> of file <a class="el" href="ipc__shm_2src_2ipc_2session_2shm_2classic_2session__server_8hpp_source.html">session_server.hpp</a>.</p>

</div>
</div>
<a id="a406e3860e68d2e863e64215aae43812e" name="a406e3860e68d2e863e64215aae43812e"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a406e3860e68d2e863e64215aae43812e">&#9670;&nbsp;</a></span>init_app_shm_as_needed()</h2>

<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;schema::MqType S_MQ_TYPE_OR_NONE, bool S_TRANSMIT_NATIVE_HANDLES, typename Mdt_payload &gt; </div>
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname"><a class="el" href="namespaceipc.html#aa3192e586cc45d3e7c22463bf2760f89">Error_code</a> <a class="el" href="classipc_1_1session_1_1shm_1_1classic_1_1Session__server.html">ipc::session::shm::classic::Session_server</a>&lt; S_MQ_TYPE_OR_NONE, S_TRANSMIT_NATIVE_HANDLES, Mdt_payload &gt;::init_app_shm_as_needed </td>
          <td>(</td>
          <td class="paramtype">const <a class="el" href="structipc_1_1session_1_1Client__app.html">Client_app</a> &amp;&#160;</td>
          <td class="paramname"><em>app</em></td><td>)</td>
          <td></td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">private</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p>Implementation of our <code>per_app_setup_func()</code> customization point used in the ctor impl: invoked from an unspecified thread, asynchronously, by <a class="el" href="classipc_1_1session_1_1shm_1_1classic_1_1Session__server.html#ac6733bac776ecd2995f41cb0feb81d63" title="Contract identical to simpler session::Session_server::async_accept() overload; but internally ensure...">async_accept()</a> during log-in, it synchronously makes it so that <code>this-&gt;app_shm(app)</code> returns non-null from now on. </p>
<p >What it returns is a pointer (always the same one) to the segregated SHM-arena pertaining to all sessions (current and future) pertaining to <code>app</code> in <code>*this</code> server. On success returns falsy <a class="el" href="namespaceipc.html#aa3192e586cc45d3e7c22463bf2760f89" title="Short-hand for flow::Error_code which is very common.">Error_code</a>. Success means either <code>app_shm(app)</code> was already going to return non-null, or it wasn't, but we successfuly made it so it will.</p>
<p >On failure to set this up:</p><ul>
<li>Truthy <a class="el" href="namespaceipc.html#aa3192e586cc45d3e7c22463bf2760f89" title="Short-hand for flow::Error_code which is very common.">Error_code</a> reason for failure is returned.</li>
<li><code>app_shm(app)</code> shall continue to return null.</li>
<li><code>*this</code> is not hosed.</li>
</ul>
<p >This method is thread-safe to invoke on the same <code>*this</code> w/r/t concurrent calls to itself and <a class="el" href="classipc_1_1session_1_1shm_1_1classic_1_1Session__server.html#ae3e011716068f4e669bd7eed487cf207" title="Returns pointer to the per-app SHM-arena, whose lifetime extends until *this is destroyed; or null if...">app_shm()</a>.</p>
<dl class="params"><dt>Parameters</dt><dd>
  <table class="params">
    <tr><td class="paramname">app</td><td>The <a class="el" href="structipc_1_1session_1_1Client__app.html" title="An App that is used as a client in at least one client-server IPC split.">Client_app</a> for which to set up, if needed, the per-app SHM-arena. </td></tr>
  </table>
  </dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>See above; falsy if and only if <code>app_shm(app)</code> shall return non-null from now on. </dd></dl>

<p class="definition">Definition at line <a class="el" href="ipc__shm_2src_2ipc_2session_2shm_2classic_2session__server_8hpp_source.html#l00531">531</a> of file <a class="el" href="ipc__shm_2src_2ipc_2session_2shm_2classic_2session__server_8hpp_source.html">session_server.hpp</a>.</p>

<p class="reference">References <a class="el" href="ipc__session_2src_2ipc_2session_2detail_2session__shared__name_8cpp_source.html#l00044">ipc::session::build_conventional_shared_name()</a>, <a class="el" href="ipc__core_2src_2ipc_2util_2util_8cpp_source.html#l00032">ipc::util::CREATE_ONLY</a>, <a class="el" href="shared__name_8hpp_source.html#l00674">ipc::util::Shared_name::ct()</a>, <a class="el" href="app_8hpp_source.html#l00144">ipc::session::App::m_name</a>, <a class="el" href="shared__name_8hpp_source.html#l00309">ipc::util::Shared_name::S_1ST_OR_ONLY</a>, <a class="el" href="shared__name_8hpp_source.html#l00312">ipc::util::Shared_name::S_RESOURCE_TYPE_ID_SHM</a>, <a class="el" href="ipc__core_2src_2ipc_2util_2util_8cpp_source.html#l00037">ipc::util::shared_resource_permissions()</a>, and <a class="el" href="ipc__shm_2src_2ipc_2session_2detail_2shm_2classic_2session__shared__name_8cpp_source.html#l00027">ipc::session::shm::classic::SHM_SUBTYPE_PREFIX</a>.</p>

<p class="reference">Referenced by <a class="el" href="ipc__shm_2src_2ipc_2session_2shm_2classic_2session__server_8hpp_source.html#l00455">ipc::session::shm::classic::Session_server&lt; S_MQ_TYPE_OR_NONE, S_TRANSMIT_NATIVE_HANDLES, Mdt_payload &gt;::Session_server()</a>.</p>
<div class="dynheader">
Here is the call graph for this function:</div>
<div class="dyncontent">
<div class="center"><iframe scrolling="no" frameborder="0" src="classipc_1_1session_1_1shm_1_1classic_1_1Session__server_a406e3860e68d2e863e64215aae43812e_cgraph.svg" width="787" height="194"><p><b>This browser is not able to show SVG: try Firefox, Chrome, Safari, or Opera instead.</b></p></iframe>
</div>
</div>
<div class="dynheader">
Here is the caller graph for this function:</div>
<div class="dyncontent">
<div class="center"><iframe scrolling="no" frameborder="0" src="classipc_1_1session_1_1shm_1_1classic_1_1Session__server_a406e3860e68d2e863e64215aae43812e_icgraph.svg" width="375" height="59"><p><b>This browser is not able to show SVG: try Firefox, Chrome, Safari, or Opera instead.</b></p></iframe>
</div>
</div>

</div>
</div>
<a id="af6472e74db4dee7cf5ce5be55ded4179" name="af6472e74db4dee7cf5ce5be55ded4179"></a>
<h2 class="memtitle"><span class="permalink"><a href="#af6472e74db4dee7cf5ce5be55ded4179">&#9670;&nbsp;</a></span>pool_size_limit_mi() <span class="overload">[1/2]</span></h2>

<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;schema::MqType S_MQ_TYPE_OR_NONE, bool S_TRANSMIT_NATIVE_HANDLES, typename Mdt_payload &gt; </div>
      <table class="memname">
        <tr>
          <td class="memname">size_t <a class="el" href="classipc_1_1session_1_1shm_1_1classic_1_1Session__server.html">ipc::session::shm::classic::Session_server</a>&lt; S_MQ_TYPE_OR_NONE, S_TRANSMIT_NATIVE_HANDLES, Mdt_payload &gt;::pool_size_limit_mi</td>
        </tr>
      </table>
</div><div class="memdoc">

<p>The pool-size value, in mebibytes, which will be used to size the pool in subsequent <code><a class="el" href="classipc_1_1session_1_1shm_1_1classic_1_1Session__server.html#ac6733bac776ecd2995f41cb0feb81d63" title="Contract identical to simpler session::Session_server::async_accept() overload; but internally ensure...">async_accept()</a></code>s. </p>
<p >One can change this via the mutator overload.</p>
<p >A large default value is used if one does not invoke that mutator.</p>
<h3>How it works</h3>
<p >Each time <a class="el" href="classipc_1_1session_1_1shm_1_1classic_1_1Session__server.html#ac6733bac776ecd2995f41cb0feb81d63" title="Contract identical to simpler session::Session_server::async_accept() overload; but internally ensure...">async_accept()</a> succeeds, a SHM pool sized according to this value is created for the session; and potentially another SHM pool sized similarly is created for the <a class="el" href="structipc_1_1session_1_1Client__app.html" title="An App that is used as a client in at least one client-server IPC split.">Client_app</a> (if and only if a session against the same <a class="el" href="structipc_1_1session_1_1Client__app.html" title="An App that is used as a client in at least one client-server IPC split.">Client_app</a> has not yet been opened by <code>*this</code>). The <em>key point</em>: only a tiny amount of RAM is actually taken at that time for each pool; the pool size only counts against vaddr space which is essentially unlimited. Physical RAM is reserved only upon actual allocation for objects subsequently, with kernel-page-sized quantization. Therefore a huge value can be used here with no RAM-use penalty; on the other hand if this value is too small, and an allocation makes a pool run out of vaddr space, then a <code>bad_alloc</code> exception will be thrown, and you're pretty much kaput. So you should use a huge value! And indeed the default is quite large.</p>
<p >Unfortunately, at least in Linux, there is nevertheless a system-wide limit against the sum of these SHM-pool virtual sizes. This is a kernel parameter and is usually admin-configurable; it might default to half your physical RAM for example. Therefore unfortunately if too much virtual space is used by active SHM-pools across the system, a Linux (at least) <code>ENOSPC</code> (No space left on device) error might result (in our case be passed to <a class="el" href="classipc_1_1session_1_1shm_1_1classic_1_1Session__server.html#ac6733bac776ecd2995f41cb0feb81d63" title="Contract identical to simpler session::Session_server::async_accept() overload; but internally ensure...">async_accept()</a> completion handler). In that case, you can either tweak the relevant kernel parameter(s); or use <a class="el" href="classipc_1_1session_1_1shm_1_1classic_1_1Session__server.html#af6472e74db4dee7cf5ce5be55ded4179" title="The pool-size value, in mebibytes, which will be used to size the pool in subsequent async_accept()s.">pool_size_limit_mi()</a> mutator to reduce your pool sizes &ndash; assuming of course it'll be sufficient for your allocation needs.</p>
<p >For most use cases none of this will be a problem. If it becomes a problem, either use a solution above; or consider <a class="el" href="classipc_1_1session_1_1shm_1_1arena__lend_1_1jemalloc_1_1Session__server.html" title="This is to vanilla Session_server what shm::arena_lend::jemalloc::Server_session is to vanilla Server...">ipc::session::shm::arena_lend::jemalloc::Session_server</a> (SHM-jemalloc) which is a multi-pool system that adjusts dynamically without your having to worry about it at all.</p>
<dl class="section return"><dt>Returns</dt><dd>See above. </dd></dl>

<p class="definition">Definition at line <a class="el" href="ipc__shm_2src_2ipc_2session_2shm_2classic_2session__server_8hpp_source.html#l00525">525</a> of file <a class="el" href="ipc__shm_2src_2ipc_2session_2shm_2classic_2session__server_8hpp_source.html">session_server.hpp</a>.</p>

</div>
</div>
<a id="a855afed179ab8f4b694d9152b94a4f2f" name="a855afed179ab8f4b694d9152b94a4f2f"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a855afed179ab8f4b694d9152b94a4f2f">&#9670;&nbsp;</a></span>pool_size_limit_mi() <span class="overload">[2/2]</span></h2>

<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;schema::MqType S_MQ_TYPE_OR_NONE, bool S_TRANSMIT_NATIVE_HANDLES, typename Mdt_payload &gt; </div>
      <table class="memname">
        <tr>
          <td class="memname">void <a class="el" href="classipc_1_1session_1_1shm_1_1classic_1_1Session__server.html">ipc::session::shm::classic::Session_server</a>&lt; S_MQ_TYPE_OR_NONE, S_TRANSMIT_NATIVE_HANDLES, Mdt_payload &gt;::pool_size_limit_mi </td>
          <td>(</td>
          <td class="paramtype">size_t&#160;</td>
          <td class="paramname"><em>limit_mi</em></td><td>)</td>
          <td></td>
        </tr>
      </table>
</div><div class="memdoc">

<p>Sets the value as returned by <code><a class="el" href="classipc_1_1session_1_1shm_1_1classic_1_1Session__server.html#af6472e74db4dee7cf5ce5be55ded4179" title="The pool-size value, in mebibytes, which will be used to size the pool in subsequent async_accept()s.">pool_size_limit_mi()</a></code> accessor. </p>
<p >See its doc header. Behavior is undefined if this is called concurrently with <a class="el" href="classipc_1_1session_1_1shm_1_1classic_1_1Session__server.html#ac6733bac776ecd2995f41cb0feb81d63" title="Contract identical to simpler session::Session_server::async_accept() overload; but internally ensure...">async_accept()</a> itself, or while an <a class="el" href="classipc_1_1session_1_1shm_1_1classic_1_1Session__server.html#ac6733bac776ecd2995f41cb0feb81d63" title="Contract identical to simpler session::Session_server::async_accept() overload; but internally ensure...">async_accept()</a> is outstanding.</p>
<p >A large default value is used if one does not call this.</p>
<dl class="params"><dt>Parameters</dt><dd>
  <table class="params">
    <tr><td class="paramname">limit_mi</td><td>The new value. It must be positive. </td></tr>
  </table>
  </dd>
</dl>

<p class="definition">Definition at line <a class="el" href="ipc__shm_2src_2ipc_2session_2shm_2classic_2session__server_8hpp_source.html#l00518">518</a> of file <a class="el" href="ipc__shm_2src_2ipc_2session_2shm_2classic_2session__server_8hpp_source.html">session_server.hpp</a>.</p>

</div>
</div>
<a id="a952348e52fda298ef7fd6b47295bf8b8" name="a952348e52fda298ef7fd6b47295bf8b8"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a952348e52fda298ef7fd6b47295bf8b8">&#9670;&nbsp;</a></span>to_ostream()</h2>

<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;schema::MqType S_MQ_TYPE_OR_NONE, bool S_TRANSMIT_NATIVE_HANDLES, typename Mdt_payload &gt; </div>
      <table class="memname">
        <tr>
          <td class="memname">void <a class="el" href="classipc_1_1session_1_1shm_1_1classic_1_1Session__server.html">ipc::session::shm::classic::Session_server</a>&lt; S_MQ_TYPE_OR_NONE, S_TRANSMIT_NATIVE_HANDLES, Mdt_payload &gt;::to_ostream </td>
          <td>(</td>
          <td class="paramtype">std::ostream *&#160;</td>
          <td class="paramname"><em>os</em></td><td>)</td>
          <td> const</td>
        </tr>
      </table>
</div><div class="memdoc">

<p>Prints string representation to the given <code>ostream</code>. </p>
<dl class="params"><dt>Parameters</dt><dd>
  <table class="params">
    <tr><td class="paramname">os</td><td>Stream to which to write. </td></tr>
  </table>
  </dd>
</dl>

<p class="definition">Definition at line <a class="el" href="ipc__shm_2src_2ipc_2session_2shm_2classic_2session__server_8hpp_source.html#l00694">694</a> of file <a class="el" href="ipc__shm_2src_2ipc_2session_2shm_2classic_2session__server_8hpp_source.html">session_server.hpp</a>.</p>

</div>
</div>
<h2 class="groupheader">Friends And Related Function Documentation</h2>
<a id="a4556b229bf2bfc3c9eb51af13c47de3d" name="a4556b229bf2bfc3c9eb51af13c47de3d"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a4556b229bf2bfc3c9eb51af13c47de3d">&#9670;&nbsp;</a></span>operator&lt;&lt;()</h2>

<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;schema::MqType S_MQ_TYPE_OR_NONE, bool S_TRANSMIT_NATIVE_HANDLES, typename Mdt_payload &gt; </div>
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">std::ostream &amp; operator&lt;&lt; </td>
          <td>(</td>
          <td class="paramtype">std::ostream &amp;&#160;</td>
          <td class="paramname"><em>os</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const <a class="el" href="classipc_1_1session_1_1shm_1_1classic_1_1Session__server.html">Session_server</a>&lt; S_MQ_TYPE_OR_NONE, S_TRANSMIT_NATIVE_HANDLES, Mdt_payload &gt; &amp;&#160;</td>
          <td class="paramname"><em>val</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">related</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p>Prints string representation of the given <code><a class="el" href="classipc_1_1session_1_1shm_1_1classic_1_1Session__server.html" title="This is to vanilla Session_server what shm::classic::Server_session is to vanilla Server_session: it ...">Session_server</a></code> to the given <code>ostream</code>. </p>
<dl class="params"><dt>Parameters</dt><dd>
  <table class="params">
    <tr><td class="paramname">os</td><td>Stream to which to write. </td></tr>
    <tr><td class="paramname">val</td><td>Object to serialize. </td></tr>
  </table>
  </dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd><code>os</code>. </dd></dl>

<p class="definition">Definition at line <a class="el" href="ipc__shm_2src_2ipc_2session_2shm_2classic_2session__server_8hpp_source.html#l00700">700</a> of file <a class="el" href="ipc__shm_2src_2ipc_2session_2shm_2classic_2session__server_8hpp_source.html">session_server.hpp</a>.</p>

</div>
</div>
<h2 class="groupheader">Member Data Documentation</h2>
<a id="a820b0bbdc3b27961be178e572d9fb529" name="a820b0bbdc3b27961be178e572d9fb529"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a820b0bbdc3b27961be178e572d9fb529">&#9670;&nbsp;</a></span>m_app_shm_by_name</h2>

<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;schema::MqType S_MQ_TYPE_OR_NONE, bool S_TRANSMIT_NATIVE_HANDLES, typename Mdt_payload &gt; </div>
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">boost::unordered_map&lt;std::string, boost::movelib::unique_ptr&lt;<a class="el" href="classipc_1_1session_1_1shm_1_1classic_1_1Session__server.html#ae4d637a7d4082c639b7ef7654cc616f3">Arena</a>&gt; &gt; <a class="el" href="classipc_1_1session_1_1shm_1_1classic_1_1Session__server.html">ipc::session::shm::classic::Session_server</a>&lt; S_MQ_TYPE_OR_NONE, S_TRANSMIT_NATIVE_HANDLES, Mdt_payload &gt;::m_app_shm_by_name</td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">private</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p>The per-app-scope SHM arenas by <a class="el" href="structipc_1_1session_1_1App.html#a8e67b57829fe43a122a23c699b5de8fd" title="Brief application name, readable to humans and unique across all other applications&#39; names; used both...">App::m_name</a>. </p>
<p >If it's not in the map, it has not been needed yet. If it is but is null, it has but error caused it to not be set-up successfully. </p>

<p class="definition">Definition at line <a class="el" href="ipc__shm_2src_2ipc_2session_2shm_2classic_2session__server_8hpp_source.html#l00426">426</a> of file <a class="el" href="ipc__shm_2src_2ipc_2session_2shm_2classic_2session__server_8hpp_source.html">session_server.hpp</a>.</p>

</div>
</div>
<a id="aac8485479a47f222c36d683a7d5d5f47" name="aac8485479a47f222c36d683a7d5d5f47"></a>
<h2 class="memtitle"><span class="permalink"><a href="#aac8485479a47f222c36d683a7d5d5f47">&#9670;&nbsp;</a></span>m_app_shm_mutex</h2>

<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;schema::MqType S_MQ_TYPE_OR_NONE, bool S_TRANSMIT_NATIVE_HANDLES, typename Mdt_payload &gt; </div>
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname"><a class="el" href="classipc_1_1session_1_1shm_1_1classic_1_1Session__server.html#a7b5893d6c0f0b1b3e33bcd3f5d183d8e">Mutex</a> <a class="el" href="classipc_1_1session_1_1shm_1_1classic_1_1Session__server.html">ipc::session::shm::classic::Session_server</a>&lt; S_MQ_TYPE_OR_NONE, S_TRANSMIT_NATIVE_HANDLES, Mdt_payload &gt;::m_app_shm_mutex</td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">mutable</span><span class="mlabel">private</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p>Protects <a class="el" href="classipc_1_1session_1_1shm_1_1classic_1_1Session__server.html#a820b0bbdc3b27961be178e572d9fb529" title="The per-app-scope SHM arenas by App::m_name.">m_app_shm_by_name</a> and <a class="el" href="classipc_1_1session_1_1shm_1_1classic_1_1Session__server.html#af4d3de8bd66de27bf740ba3eeb1d988f" title="Set of names of every SHM-pool created w/r/t m_app_shm_by_name.">m_shm_pool_names</a>. </p>

<p class="definition">Definition at line <a class="el" href="ipc__shm_2src_2ipc_2session_2shm_2classic_2session__server_8hpp_source.html#l00420">420</a> of file <a class="el" href="ipc__shm_2src_2ipc_2session_2shm_2classic_2session__server_8hpp_source.html">session_server.hpp</a>.</p>

</div>
</div>
<a id="ae86848eb54eac26e276cee29a0eb030a" name="ae86848eb54eac26e276cee29a0eb030a"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ae86848eb54eac26e276cee29a0eb030a">&#9670;&nbsp;</a></span>m_pool_size_limit_mi</h2>

<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;schema::MqType S_MQ_TYPE_OR_NONE, bool S_TRANSMIT_NATIVE_HANDLES, typename Mdt_payload &gt; </div>
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">size_t <a class="el" href="classipc_1_1session_1_1shm_1_1classic_1_1Session__server.html">ipc::session::shm::classic::Session_server</a>&lt; S_MQ_TYPE_OR_NONE, S_TRANSMIT_NATIVE_HANDLES, Mdt_payload &gt;::m_pool_size_limit_mi</td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">private</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p>See <a class="el" href="classipc_1_1session_1_1shm_1_1classic_1_1Session__server.html#af6472e74db4dee7cf5ce5be55ded4179" title="The pool-size value, in mebibytes, which will be used to size the pool in subsequent async_accept()s.">pool_size_limit_mi()</a>. </p>

<p class="definition">Definition at line <a class="el" href="ipc__shm_2src_2ipc_2session_2shm_2classic_2session__server_8hpp_source.html#l00411">411</a> of file <a class="el" href="ipc__shm_2src_2ipc_2session_2shm_2classic_2session__server_8hpp_source.html">session_server.hpp</a>.</p>

</div>
</div>
<a id="af4d3de8bd66de27bf740ba3eeb1d988f" name="af4d3de8bd66de27bf740ba3eeb1d988f"></a>
<h2 class="memtitle"><span class="permalink"><a href="#af4d3de8bd66de27bf740ba3eeb1d988f">&#9670;&nbsp;</a></span>m_shm_pool_names</h2>

<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;schema::MqType S_MQ_TYPE_OR_NONE, bool S_TRANSMIT_NATIVE_HANDLES, typename Mdt_payload &gt; </div>
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">boost::shared_ptr&lt;std::vector&lt;<a class="el" href="namespaceipc_1_1session.html#a6d07d9996af19e57eb42416e914110ea">Shared_name</a>&gt; &gt; <a class="el" href="classipc_1_1session_1_1shm_1_1classic_1_1Session__server.html">ipc::session::shm::classic::Session_server</a>&lt; S_MQ_TYPE_OR_NONE, S_TRANSMIT_NATIVE_HANDLES, Mdt_payload &gt;::m_shm_pool_names</td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">private</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p>Set of names of every SHM-pool created w/r/t <a class="el" href="classipc_1_1session_1_1shm_1_1classic_1_1Session__server.html#a820b0bbdc3b27961be178e572d9fb529" title="The per-app-scope SHM arenas by App::m_name.">m_app_shm_by_name</a>. </p>
<p >Each time an <a class="el" href="classipc_1_1session_1_1shm_1_1classic_1_1Session__server.html#ae4d637a7d4082c639b7ef7654cc616f3" title="Short-hand for shm::classic::Session_mv::Arena. See app_shm() in particular.">Arena</a> is added to <a class="el" href="classipc_1_1session_1_1shm_1_1classic_1_1Session__server.html#a820b0bbdc3b27961be178e572d9fb529" title="The per-app-scope SHM arenas by App::m_name.">m_app_shm_by_name</a>, its pool name is added to <a class="el" href="classipc_1_1session_1_1shm_1_1classic_1_1Session__server.html#af4d3de8bd66de27bf740ba3eeb1d988f" title="Set of names of every SHM-pool created w/r/t m_app_shm_by_name.">m_shm_pool_names</a>. A certain cleanup function, run from <a class="el" href="classipc_1_1session_1_1Session__server__impl.html" title="Internal class template comprising API/logic common to every Session_server variant,...">Session_server_impl</a> dtor due to our use of <a class="el" href="classipc_1_1session_1_1Session__server__impl.html#a40fca0b878f9150f5f7db55768da45ad" title="Utility for sub-classes: ensures that task() is invoked near the end of *this dtor&#39;s execution,...">Session_server_impl::sub_class_set_deinit_func()</a>, removes (unlinks) each pool listed in <code>*m_shm_pool_names</code>.</p>
<h3>Rationale</h3>
<p >Why a <code>shared_ptr</code>? Answer: By the time the aforementioned cleanup task runs, <code>*static_cast&lt;<a class="el" href="classipc_1_1session_1_1shm_1_1classic_1_1Session__server.html" title="This is to vanilla Session_server what shm::classic::Server_session is to vanilla Server_session: it ...">shm::classic::Session_server</a>*&gt;(this)</code> is destroyed &ndash; so it cannot access that <code>this</code> or specifically <code>this-&gt;m_shm_pool_names</code>. Hence it captures a <code>shared_ptr</code> from this shared-pointer group instead; and the <code>vector</code> lives as long as it needs to to be scanned by the cleanup task. </p>

<p class="definition">Definition at line <a class="el" href="ipc__shm_2src_2ipc_2session_2shm_2classic_2session__server_8hpp_source.html#l00440">440</a> of file <a class="el" href="ipc__shm_2src_2ipc_2session_2shm_2classic_2session__server_8hpp_source.html">session_server.hpp</a>.</p>

</div>
</div>
<a id="a58684b85b4cfe6c4095bc56f2700ec27" name="a58684b85b4cfe6c4095bc56f2700ec27"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a58684b85b4cfe6c4095bc56f2700ec27">&#9670;&nbsp;</a></span>m_srv_app_ref</h2>

<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;schema::MqType S_MQ_TYPE_OR_NONE, bool S_TRANSMIT_NATIVE_HANDLES, typename Mdt_payload &gt; </div>
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">const <a class="el" href="structipc_1_1session_1_1Server__app.html">Server_app</a>&amp; <a class="el" href="classipc_1_1session_1_1shm_1_1classic_1_1Session__server.html">ipc::session::shm::classic::Session_server</a>&lt; S_MQ_TYPE_OR_NONE, S_TRANSMIT_NATIVE_HANDLES, Mdt_payload &gt;::m_srv_app_ref</td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">private</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p>Identical to <a class="el" href="classipc_1_1session_1_1shm_1_1classic_1_1Session__server.html#a58684b85b4cfe6c4095bc56f2700ec27" title="Identical to Session_server::m_srv_app_ref. Used in init_app_shm_as_needed() name calc.">Session_server::m_srv_app_ref</a>. Used in <a class="el" href="classipc_1_1session_1_1shm_1_1classic_1_1Session__server.html#a406e3860e68d2e863e64215aae43812e" title="Implementation of our per_app_setup_func() customization point used in the ctor impl: invoked from an...">init_app_shm_as_needed()</a> name calc. </p>

<p class="definition">Definition at line <a class="el" href="ipc__shm_2src_2ipc_2session_2shm_2classic_2session__server_8hpp_source.html#l00414">414</a> of file <a class="el" href="ipc__shm_2src_2ipc_2session_2shm_2classic_2session__server_8hpp_source.html">session_server.hpp</a>.</p>

</div>
</div>
<a id="a1034bc43eb088ede11111b97f79aff96" name="a1034bc43eb088ede11111b97f79aff96"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a1034bc43eb088ede11111b97f79aff96">&#9670;&nbsp;</a></span>m_srv_namespace</h2>

<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;schema::MqType S_MQ_TYPE_OR_NONE, bool S_TRANSMIT_NATIVE_HANDLES, typename Mdt_payload &gt; </div>
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">const <a class="el" href="namespaceipc_1_1session.html#a6d07d9996af19e57eb42416e914110ea">Shared_name</a> <a class="el" href="classipc_1_1session_1_1shm_1_1classic_1_1Session__server.html">ipc::session::shm::classic::Session_server</a>&lt; S_MQ_TYPE_OR_NONE, S_TRANSMIT_NATIVE_HANDLES, Mdt_payload &gt;::m_srv_namespace</td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">private</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p>Identical <a class="el" href="classipc_1_1session_1_1Session__base.html#a60a30526bad0c8db6ad05ede618a22bd" title="See srv_namespace().">Session_base::m_srv_namespace</a>. Used in <a class="el" href="classipc_1_1session_1_1shm_1_1classic_1_1Session__server.html#a406e3860e68d2e863e64215aae43812e" title="Implementation of our per_app_setup_func() customization point used in the ctor impl: invoked from an...">init_app_shm_as_needed()</a> name calc. </p>

<p class="definition">Definition at line <a class="el" href="ipc__shm_2src_2ipc_2session_2shm_2classic_2session__server_8hpp_source.html#l00417">417</a> of file <a class="el" href="ipc__shm_2src_2ipc_2session_2shm_2classic_2session__server_8hpp_source.html">session_server.hpp</a>.</p>

</div>
</div>
<hr/>The documentation for this class was generated from the following files:<ul>
<li>session/shm/classic/<a class="el" href="session_2shm_2classic_2classic__fwd_8hpp_source.html">classic_fwd.hpp</a></li>
<li>session/shm/classic/<a class="el" href="ipc__shm_2src_2ipc_2session_2shm_2classic_2session__server_8hpp_source.html">session_server.hpp</a></li>
</ul>
</div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
Generated on Fri Apr 11 2025 20:02:26 for Flow-IPC by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.4
</small></address>
</body>
</html>
